Skip to content
This repository has been archived by the owner on Mar 15, 2022. It is now read-only.

Commit

Permalink
Merge pull request #251 from AndyAyersMS/TailCall
Browse files Browse the repository at this point in the history
Unblock more methods by leaving unmarked tail calls as calls
  • Loading branch information
AndyAyersMS committed Mar 6, 2015
2 parents b053d00 + 64f26ba commit e3efa38
Show file tree
Hide file tree
Showing 130 changed files with 533,717 additions and 21,162 deletions.
14 changes: 11 additions & 3 deletions lib/Reader/readerir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2611,17 +2611,21 @@ void GenIR::storePrimitiveType(IRNode *Value, IRNode *Addr,
IRNode *TypedAddr = Addr;

// We need to cast the address when types are mismatched.
Type *ExpectedTy = Value->getType();
Type *ExpectedTy = this->getType(CorInfoType, NULL);
if (ReferentTy != ExpectedTy) {
Type *PtrToExpectedTy = getUnmanagedPointerType(ExpectedTy);
TypedAddr =
(IRNode *)LLVMBuilder->CreatePointerCast(Addr, PtrToExpectedTy);
}

// Convert the value as necessary.
IRNode *ValueToStore = convertFromStackType(Value, CorInfoType, ExpectedTy);

uint32_t Align = (Alignment == Reader_AlignNatural)
? TargetPointerSizeInBits / 8
: Alignment;
StoreInst *StoreInst = LLVMBuilder->CreateStore(Value, TypedAddr, IsVolatile);
StoreInst *StoreInst = LLVMBuilder->CreateStore(ValueToStore, TypedAddr,
IsVolatile);
StoreInst->setAlignment(Align);
}

Expand Down Expand Up @@ -2902,7 +2906,11 @@ IRNode *GenIR::genCall(ReaderCallTargetData *CallTargetInfo,
GCLayout *GCInfo = nullptr;

if (CallTargetInfo->isTailCall()) {
throw NotYetImplementedException("Tail call");
// If there's no explicit tail prefix, we can generate
// a normal call and all will be well.
if (!CallTargetInfo->isUnmarkedTailCall()) {
throw NotYetImplementedException("Tail call");
}
}

if (SigInfo->hasTypeArg()) {
Expand Down
3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Add1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/And1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/AndRef.error.txt

Large diffs are not rendered by default.

3,557 changes: 3,420 additions & 137 deletions test/BaseLine/JIT/CodeGenBringUpTests/Args4.error.txt

Large diffs are not rendered by default.

3,557 changes: 3,420 additions & 137 deletions test/BaseLine/JIT/CodeGenBringUpTests/Args5.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/AsgAdd1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/AsgAnd1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/AsgOr1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/AsgSub1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/AsgXor1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/BinaryRMW.error.txt

Large diffs are not rendered by default.

5,153 changes: 4,910 additions & 243 deletions test/BaseLine/JIT/CodeGenBringUpTests/Call1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/CnsBool.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/CnsLng1.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblAdd.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblAddConst.error.txt

Large diffs are not rendered by default.

5,227 changes: 5,051 additions & 176 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblArea.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblArray.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblAvg2.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblAvg6.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblCall1.error.txt

Large diffs are not rendered by default.

5,202 changes: 5,032 additions & 170 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblCall2.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblDist.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblDiv.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblDivConst.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblFillArray.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblMul.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblMulConst.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblNeg.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblRem.error.txt

Large diffs are not rendered by default.

5,274 changes: 5,016 additions & 258 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblRoots.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblSub.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblSubConst.error.txt

Large diffs are not rendered by default.

5,199 changes: 5,020 additions & 179 deletions test/BaseLine/JIT/CodeGenBringUpTests/DblVar.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/Eq1.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPAdd.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPAddConst.error.txt

Large diffs are not rendered by default.

5,227 changes: 5,051 additions & 176 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPArea.error.txt

Large diffs are not rendered by default.

5,207 changes: 5,024 additions & 183 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPArray.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPAvg2.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPAvg6.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPCall1.error.txt

Large diffs are not rendered by default.

5,230 changes: 5,046 additions & 184 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPCall2.error.txt

Large diffs are not rendered by default.

5,491 changes: 5,219 additions & 272 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPConvDbl2Lng.error.txt

Large diffs are not rendered by default.

5,491 changes: 5,219 additions & 272 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPConvF2F.error.txt

Large diffs are not rendered by default.

5,189 changes: 5,015 additions & 174 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPConvF2I.error.txt

Large diffs are not rendered by default.

5,491 changes: 5,219 additions & 272 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPConvF2Lng.error.txt

Large diffs are not rendered by default.

5,491 changes: 5,219 additions & 272 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPConvI2F.error.txt

Large diffs are not rendered by default.

5,207 changes: 5,024 additions & 183 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPDist.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPDiv.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPDivConst.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPError.error.txt

Large diffs are not rendered by default.

5,207 changes: 5,024 additions & 183 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPFillArray.error.txt

Large diffs are not rendered by default.

5,193 changes: 5,017 additions & 176 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPMath.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPMul.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPMulConst.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPNeg.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPRem.error.txt

Large diffs are not rendered by default.

5,600 changes: 5,360 additions & 240 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPRoots.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPSmall.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPSub.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPSubConst.error.txt

Large diffs are not rendered by default.

5,191 changes: 5,016 additions & 175 deletions test/BaseLine/JIT/CodeGenBringUpTests/FPVar.error.txt

Large diffs are not rendered by default.

5,193 changes: 5,017 additions & 176 deletions test/BaseLine/JIT/CodeGenBringUpTests/FactorialRec.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/FibLoop.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/FiboRec.error.txt

Large diffs are not rendered by default.

5,212 changes: 4,973 additions & 239 deletions test/BaseLine/JIT/CodeGenBringUpTests/Gcd.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/Ge1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/Gt1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Ind1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/InitObj.error.txt

Large diffs are not rendered by default.

3,551 changes: 3,417 additions & 134 deletions test/BaseLine/JIT/CodeGenBringUpTests/InstanceCalls.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/IntArraySum.error.txt

Large diffs are not rendered by default.

5,529 changes: 5,291 additions & 238 deletions test/BaseLine/JIT/CodeGenBringUpTests/IntConv.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrue1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueEqDbl.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueEqFP.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueEqInt1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueGeDbl.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueGeFP.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueGeInt1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueGtDbl.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueGtFP.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueGtInt1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueLeDbl.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueLeFP.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueLeInt1.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueLtDbl.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueLtFP.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueLtInt1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueNeDbl.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueNeFP.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/JTrueNeInt1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Jmp1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/Le1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/LeftShift.error.txt

Large diffs are not rendered by default.

5,455 changes: 5,201 additions & 254 deletions test/BaseLine/JIT/CodeGenBringUpTests/LngConv.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/LongArgsAndReturn.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/Lt1.error.txt

Large diffs are not rendered by default.

3,561 changes: 3,422 additions & 139 deletions test/BaseLine/JIT/CodeGenBringUpTests/Ne1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/NegRMW.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/NestedCall.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/NotAndNeg.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/NotRMW.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/ObjAlloc.error.txt

Large diffs are not rendered by default.

3,556 changes: 3,423 additions & 133 deletions test/BaseLine/JIT/CodeGenBringUpTests/OpMembersOfStructLocal.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Or1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/OrRef.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/RightShiftRef.error.txt

Large diffs are not rendered by default.

5,239 changes: 5,040 additions & 199 deletions test/BaseLine/JIT/CodeGenBringUpTests/StaticCalls.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/StructFldAddr.error.txt

Large diffs are not rendered by default.

3,559 changes: 3,421 additions & 138 deletions test/BaseLine/JIT/CodeGenBringUpTests/StructInstMethod.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Sub1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/SubRef.error.txt

Large diffs are not rendered by default.

5,299 changes: 4,989 additions & 310 deletions test/BaseLine/JIT/CodeGenBringUpTests/Swap.error.txt

Large diffs are not rendered by default.

3,547 changes: 3,415 additions & 132 deletions test/BaseLine/JIT/CodeGenBringUpTests/Switch.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Unbox.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/Xor1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/XorRef.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/addref.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/div1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/divref.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/mul1.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/mul2.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/mul3.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/mul4.error.txt

Large diffs are not rendered by default.

3,563 changes: 3,423 additions & 140 deletions test/BaseLine/JIT/CodeGenBringUpTests/rem1.error.txt

Large diffs are not rendered by default.

5,138 changes: 4,895 additions & 243 deletions test/BaseLine/JIT/Directed/Arrays/complex1.error.txt

Large diffs are not rendered by default.

5,138 changes: 4,895 additions & 243 deletions test/BaseLine/JIT/Directed/Arrays/simple1.error.txt

Large diffs are not rendered by default.

0 comments on commit e3efa38

Please sign in to comment.