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

Commit

Permalink
Unblock more methods by leaving unmarked tail calls as calls
Browse files Browse the repository at this point in the history
If a tail call opportunity doesn't have the explicit `tail` prefix the jit can just generate a normal call. This turns all of our blocking tail call failures into successes or other failure types.

It also exposed an issue in storePrimitiveType where we'd widen i16 stores to i32. So I've fixed that too.

Rebased the tests since lots more methods now get handled.
  • Loading branch information
AndyAyersMS committed Mar 6, 2015
1 parent 298378f commit 64f26ba
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 64f26ba

Please sign in to comment.