-
-
Save nikic/703794bdf8ab04c4a4ca40c4145a1f90 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/llvm/include/llvm/IR/Statepoint.h b/llvm/include/llvm/IR/Statepoint.h | |
index c6251b9bf5c9..cf402f6457ed 100644 | |
--- a/llvm/include/llvm/IR/Statepoint.h | |
+++ b/llvm/include/llvm/IR/Statepoint.h | |
@@ -120,11 +120,19 @@ public: | |
} | |
/// Return the type of the value returned by the call underlying the | |
- /// statepoint. | |
+ /// statepoint, based on the return type of using gc.result intrinsics. | |
+ /// Returns nullptr if there are no gc.result uses. | |
Type *getActualReturnType() const { | |
- auto *CalleeTy = | |
- cast<PointerType>(getActualCalledOperand()->getType())->getElementType(); | |
- return cast<FunctionType>(CalleeTy)->getReturnType(); | |
+ Type *ReturnType = nullptr; | |
+ for (const User *U : users()) { | |
+ if (auto *Result = dyn_cast<GCResultInst>(U)) { | |
+ if (!ReturnType) | |
+ ReturnType = Result->getType(); | |
+ assert(ReturnType == Result->getType() && | |
+ "gc.result intrinsics with different result types"); | |
+ } | |
+ } | |
+ return ReturnType; | |
} | |
diff --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp | |
index e2db9633bfb9..457cf7b8e834 100644 | |
--- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp | |
+++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp | |
@@ -1016,10 +1016,14 @@ SelectionDAGBuilder::LowerStatepoint(const GCStatepointInst &I, | |
ActualCallee = Callee; | |
} | |
+ Type *RetTy = I.getActualReturnType(); | |
+ if (!RetTy) | |
+ RetTy = Type::getVoidTy(I.getContext()); | |
+ | |
StatepointLoweringInfo SI(DAG); | |
populateCallLoweringInfo(SI.CLI, &I, GCStatepointInst::CallArgsBeginPos, | |
- I.getNumCallArgs(), ActualCallee, | |
- I.getActualReturnType(), false /* IsPatchPoint */); | |
+ I.getNumCallArgs(), ActualCallee, RetTy, | |
+ false /* IsPatchPoint */); | |
// There may be duplication in the gc.relocate list; such as two copies of | |
// each relocation on normal and exceptional path for an invoke. We only | |
@@ -1076,7 +1080,6 @@ SelectionDAGBuilder::LowerStatepoint(const GCStatepointInst &I, | |
// Export the result value if needed | |
const std::pair<bool, bool> GCResultLocality = I.getGCResultLocality(); | |
- Type *RetTy = I.getActualReturnType(); | |
if (RetTy->isVoidTy() || | |
(!GCResultLocality.first && !GCResultLocality.second)) { | |
@@ -1168,7 +1171,7 @@ void SelectionDAGBuilder::visitGCResult(const GCResultInst &CI) { | |
// register because statepoint and actual call return types can be | |
// different, and getValue() will use CopyFromReg of the wrong type, | |
// which is always i32 in our case. | |
- Type *RetTy = SI->getActualReturnType(); | |
+ Type *RetTy = CI.getType(); | |
SDValue CopyFromReg = getCopyFromRegs(SI, RetTy); | |
assert(CopyFromReg.getNode()); | |
diff --git a/llvm/test/CodeGen/X86/statepoint-ra.ll b/llvm/test/CodeGen/X86/statepoint-ra.ll | |
index 648752c7ebaa..ee0713e139ab 100644 | |
--- a/llvm/test/CodeGen/X86/statepoint-ra.ll | |
+++ b/llvm/test/CodeGen/X86/statepoint-ra.ll | |
@@ -72,59 +72,59 @@ declare token @llvm.experimental.gc.statepoint.p0f_isVoidp1i8f64f64f64f64f64f64f | |
;CHECK: bb.0.bb: | |
;CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000) | |
;CHECK: liveins: $rdi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7 | |
-;CHECK: %49:fr64 = COPY $xmm7 | |
+;CHECK: %47:fr64 = COPY $xmm7 | |
;CHECK: %10:fr64 = COPY $xmm6 | |
-;CHECK: %41:fr64 = COPY $xmm5 | |
-;CHECK: %45:fr64 = COPY $xmm4 | |
-;CHECK: %53:fr64 = COPY $xmm3 | |
+;CHECK: %39:fr64 = COPY $xmm5 | |
+;CHECK: %43:fr64 = COPY $xmm4 | |
+;CHECK: %51:fr64 = COPY $xmm3 | |
;CHECK: %6:fr64 = COPY $xmm2 | |
-;CHECK: %58:fr64 = COPY $xmm1 | |
-;CHECK: %62:fr64 = COPY $xmm0 | |
+;CHECK: %56:fr64 = COPY $xmm1 | |
+;CHECK: %60:fr64 = COPY $xmm0 | |
;CHECK: %3:gr64 = COPY $rdi | |
-;CHECK: %76:fr64 = MOVSDrm_alt %fixed-stack.0, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.0) | |
+;CHECK: %74:fr64 = MOVSDrm_alt %fixed-stack.0, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.0) | |
;CHECK: %14:fr64 = MOVSDrm_alt %fixed-stack.1, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.1, align 16) | |
-;CHECK: %66:fr64 = MOVSDrm_alt %fixed-stack.2, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.2) | |
-;CHECK: %71:fr64 = MOVSDrm_alt %fixed-stack.3, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.3, align 16) | |
+;CHECK: %64:fr64 = MOVSDrm_alt %fixed-stack.2, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.2) | |
+;CHECK: %69:fr64 = MOVSDrm_alt %fixed-stack.3, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.3, align 16) | |
;CHECK: MOV64mr %stack.0, 1, $noreg, 0, $noreg, %3 :: (store (s64) into %stack.0) | |
;CHECK: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
-;CHECK: STATEPOINT 2882400000, 0, 0, target-flags(x86-plt) @blam, 2, 9, 2, 0, 2, 59, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2, 26, 2, 0, 2, 0, 1, 8, %stack.0, 0, 2, 4, %62, 2, 7, 2, 0, 2, 4, %58, 2, 7, 2, 0, 2, 4, %6, 2, 7, 2, 0, 2, 4, %53, 2, 7, 2, 0, 2, 4, %45, 2, 7, 2, 0, 2, 4, %41, 2, 7, 2, 0, 2, 4, %10, 2, 7, 2, 0, 2, 4, %49, 2, 7, 2, 0, 2, 4, %71, 2, 7, 2, 0, 2, 4, %66, 2, 7, 2, 0, 2, 4, %14, 2, 7, 2, 0, 2, 4, %76, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 1, 8, %stack.0, 0, 2, 0, 2, 1, 0, 0, csr_64_mostregs, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s64) on %stack.0) | |
+;CHECK: STATEPOINT 2882400000, 0, 0, target-flags(x86-plt) @blam, 2, 9, 2, 0, 2, 59, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2, 26, 2, 0, 2, 0, 1, 8, %stack.0, 0, 2, 4, %60, 2, 7, 2, 0, 2, 4, %56, 2, 7, 2, 0, 2, 4, %6, 2, 7, 2, 0, 2, 4, %51, 2, 7, 2, 0, 2, 4, %43, 2, 7, 2, 0, 2, 4, %39, 2, 7, 2, 0, 2, 4, %10, 2, 7, 2, 0, 2, 4, %47, 2, 7, 2, 0, 2, 4, %69, 2, 7, 2, 0, 2, 4, %64, 2, 7, 2, 0, 2, 4, %14, 2, 7, 2, 0, 2, 4, %74, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 1, 8, %stack.0, 0, 2, 0, 2, 1, 0, 0, csr_64_mostregs, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s64) on %stack.0) | |
;CHECK: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
;CHECK: %17:gr32 = MOV32r0 implicit-def dead $eflags | |
;CHECK: TEST8rr %17.sub_8bit, %17.sub_8bit, implicit-def $eflags | |
-;CHECK: MOVSDmr %stack.1, 1, $noreg, 0, $noreg, %41 :: (store (s64) into %stack.1) | |
-;CHECK: MOVSDmr %stack.2, 1, $noreg, 0, $noreg, %45 :: (store (s64) into %stack.2) | |
-;CHECK: MOVSDmr %stack.5, 1, $noreg, 0, $noreg, %58 :: (store (s64) into %stack.5) | |
-;CHECK: MOVSDmr %stack.6, 1, $noreg, 0, $noreg, %62 :: (store (s64) into %stack.6) | |
+;CHECK: MOVSDmr %stack.1, 1, $noreg, 0, $noreg, %39 :: (store (s64) into %stack.1) | |
+;CHECK: MOVSDmr %stack.2, 1, $noreg, 0, $noreg, %43 :: (store (s64) into %stack.2) | |
+;CHECK: MOVSDmr %stack.5, 1, $noreg, 0, $noreg, %56 :: (store (s64) into %stack.5) | |
+;CHECK: MOVSDmr %stack.6, 1, $noreg, 0, $noreg, %60 :: (store (s64) into %stack.6) | |
;CHECK: JCC_1 %bb.2, 4, implicit killed $eflags | |
;CHECK: bb.1: | |
;CHECK: successors: %bb.3(0x80000000) | |
-;CHECK: %54:fr64 = MOVSDrm_alt $rip, 1, $noreg, %const.0, $noreg :: (load (s64) from constant-pool) | |
-;CHECK: MOVSDmr %stack.3, 1, $noreg, 0, $noreg, %54 :: (store (s64) into %stack.3) | |
-;CHECK: MOVSDmr %stack.4, 1, $noreg, 0, $noreg, %54 :: (store (s64) into %stack.4) | |
-;CHECK: MOVSDmr %stack.7, 1, $noreg, 0, $noreg, %54 :: (store (s64) into %stack.7) | |
+;CHECK: %52:fr64 = MOVSDrm_alt $rip, 1, $noreg, %const.0, $noreg :: (load (s64) from constant-pool) | |
+;CHECK: MOVSDmr %stack.3, 1, $noreg, 0, $noreg, %52 :: (store (s64) into %stack.3) | |
+;CHECK: MOVSDmr %stack.4, 1, $noreg, 0, $noreg, %52 :: (store (s64) into %stack.4) | |
+;CHECK: MOVSDmr %stack.7, 1, $noreg, 0, $noreg, %52 :: (store (s64) into %stack.7) | |
;CHECK: JMP_1 %bb.3 | |
;CHECK: bb.2.bb13: | |
;CHECK: successors: %bb.3(0x80000000) | |
;CHECK: ADJCALLSTACKDOWN64 8, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
;CHECK: MOVSDmr $rsp, 1, $noreg, 0, $noreg, %14 :: (store (s64) into stack) | |
;CHECK: dead $edi = MOV32r0 implicit-def dead $eflags, implicit-def $rdi | |
-;CHECK: $xmm0 = COPY %62 | |
-;CHECK: $xmm1 = COPY %58 | |
+;CHECK: $xmm0 = COPY %60 | |
+;CHECK: $xmm1 = COPY %56 | |
;CHECK: $xmm2 = COPY %6 | |
-;CHECK: $xmm3 = COPY %45 | |
-;CHECK: $xmm4 = COPY %41 | |
+;CHECK: $xmm3 = COPY %43 | |
+;CHECK: $xmm4 = COPY %39 | |
;CHECK: $xmm5 = COPY %10 | |
-;CHECK: $xmm6 = COPY %71 | |
-;CHECK: $xmm7 = COPY %66 | |
-;CHECK: MOVSDmr %stack.3, 1, $noreg, 0, $noreg, %49 :: (store (s64) into %stack.3) | |
-;CHECK: MOVSDmr %stack.4, 1, $noreg, 0, $noreg, %53 :: (store (s64) into %stack.4) | |
-;CHECK: MOVSDmr %stack.7, 1, $noreg, 0, $noreg, %76 :: (store (s64) into %stack.7) | |
-;CHECK: STATEPOINT 2, 5, 9, undef %22:gr64, $rdi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7, 2, 0, 2, 0, 2, 59, 2, 0, 2, 2, 2, 0, 2, 70, 2, 0, 2, 26, 2, 0, 2, 0, 2, 0, 2, 4, 1, 8, %stack.6, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.5, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.4, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.0, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp, implicit-def dead $eax :: (load (s64) from %stack.1), (load (s64) from %stack.2), (load (s64) from %stack.3), (load (s64) from %stack.4), (load (s64) from %stack.5), (load (s64) from %stack.6), (load (s64) from %fixed-stack.2), (load (s64) from %fixed-stack.3, align 16), (load (s64) from %fixed-stack.0) | |
+;CHECK: $xmm6 = COPY %69 | |
+;CHECK: $xmm7 = COPY %64 | |
+;CHECK: MOVSDmr %stack.3, 1, $noreg, 0, $noreg, %47 :: (store (s64) into %stack.3) | |
+;CHECK: MOVSDmr %stack.4, 1, $noreg, 0, $noreg, %51 :: (store (s64) into %stack.4) | |
+;CHECK: MOVSDmr %stack.7, 1, $noreg, 0, $noreg, %74 :: (store (s64) into %stack.7) | |
+;CHECK: STATEPOINT 2, 5, 9, undef %22:gr64, $rdi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7, 2, 0, 2, 0, 2, 59, 2, 0, 2, 2, 2, 0, 2, 70, 2, 0, 2, 26, 2, 0, 2, 0, 2, 0, 2, 4, 1, 8, %stack.6, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.5, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.4, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.0, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (load (s64) from %stack.1), (load (s64) from %stack.2), (load (s64) from %stack.3), (load (s64) from %stack.4), (load (s64) from %stack.5), (load (s64) from %stack.6), (load (s64) from %fixed-stack.2), (load (s64) from %fixed-stack.3, align 16), (load (s64) from %fixed-stack.0) | |
;CHECK: ADJCALLSTACKUP64 8, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
;CHECK: bb.3.bb15: | |
;CHECK: successors: %bb.7(0x7ffff800), %bb.4(0x00000800) | |
-;CHECK: %24:gr32 = MOV32r0 implicit-def dead $eflags | |
-;CHECK: TEST8rr %24.sub_8bit, %24.sub_8bit, implicit-def $eflags | |
+;CHECK: %23:gr32 = MOV32r0 implicit-def dead $eflags | |
+;CHECK: TEST8rr %23.sub_8bit, %23.sub_8bit, implicit-def $eflags | |
;CHECK: JCC_1 %bb.7, 5, implicit killed $eflags | |
;CHECK: JMP_1 %bb.4 | |
;CHECK: bb.4.bb19: | |
@@ -132,29 +132,29 @@ declare token @llvm.experimental.gc.statepoint.p0f_isVoidp1i8f64f64f64f64f64f64f | |
;CHECK: EH_LABEL <mcsymbol > | |
;CHECK: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
;CHECK: $edx = MOV32r0 implicit-def dead $eflags | |
-;CHECK: STATEPOINT 1, 16, 3, undef %29:gr64, undef $edi, undef $rsi, $edx, 2, 0, 2, 0, 2, 105, 2, 0, 2, 2, 2, 0, 2, 97, 2, 0, 2, 26, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, 2, 2, 2, 3, 2, 0, 2, 20, 2, 0, 2, 0, 2, 4278124286, 2, 4, 1, 8, %stack.6, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.5, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.4, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.7, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 2, 4278124286, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp, implicit-def dead $eax :: (load (s64) from %stack.1), (load (s64) from %stack.2), (load (s64) from %stack.3), (load (s64) from %stack.4), (load (s64) from %stack.5), (load (s64) from %stack.6), (load (s64) from %fixed-stack.2), (load (s64) from %fixed-stack.3, align 16), (load (s64) from %stack.7) | |
+;CHECK: STATEPOINT 1, 16, 3, undef %28:gr64, undef $edi, undef $rsi, $edx, 2, 0, 2, 0, 2, 105, 2, 0, 2, 2, 2, 0, 2, 97, 2, 0, 2, 26, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, 2, 2, 2, 3, 2, 0, 2, 20, 2, 0, 2, 0, 2, 4278124286, 2, 4, 1, 8, %stack.6, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.5, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.4, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.7, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 2, 4278124286, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (load (s64) from %stack.1), (load (s64) from %stack.2), (load (s64) from %stack.3), (load (s64) from %stack.4), (load (s64) from %stack.5), (load (s64) from %stack.6), (load (s64) from %fixed-stack.2), (load (s64) from %fixed-stack.3, align 16), (load (s64) from %stack.7) | |
;CHECK: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
;CHECK: EH_LABEL <mcsymbol > | |
;CHECK: JMP_1 %bb.5 | |
;CHECK: bb.5.bb21: | |
;CHECK: successors: | |
;CHECK: ADJCALLSTACKDOWN64 8, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
-;CHECK: %81:fr64 = MOVSDrm_alt %stack.7, 1, $noreg, 0, $noreg :: (load (s64) from %stack.7) | |
-;CHECK: MOVSDmr $rsp, 1, $noreg, 0, $noreg, %81 :: (store (s64) into stack) | |
+;CHECK: %79:fr64 = MOVSDrm_alt %stack.7, 1, $noreg, 0, $noreg :: (load (s64) from %stack.7) | |
+;CHECK: MOVSDmr $rsp, 1, $noreg, 0, $noreg, %79 :: (store (s64) into stack) | |
;CHECK: $xmm0 = MOVSDrm_alt %stack.6, 1, $noreg, 0, $noreg :: (load (s64) from %stack.6) | |
;CHECK: $xmm1 = MOVSDrm_alt %stack.5, 1, $noreg, 0, $noreg :: (load (s64) from %stack.5) | |
;CHECK: $xmm2 = MOVSDrm_alt %stack.4, 1, $noreg, 0, $noreg :: (load (s64) from %stack.4) | |
;CHECK: $xmm3 = MOVSDrm_alt %stack.2, 1, $noreg, 0, $noreg :: (load (s64) from %stack.2) | |
;CHECK: $xmm4 = MOVSDrm_alt %stack.1, 1, $noreg, 0, $noreg :: (load (s64) from %stack.1) | |
;CHECK: $xmm5 = MOVSDrm_alt %stack.3, 1, $noreg, 0, $noreg :: (load (s64) from %stack.3) | |
-;CHECK: %74:fr64 = MOVSDrm_alt %fixed-stack.3, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.3, align 16) | |
-;CHECK: %95:fr64 = COPY %74 | |
-;CHECK: $xmm6 = COPY %95 | |
+;CHECK: %72:fr64 = MOVSDrm_alt %fixed-stack.3, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.3, align 16) | |
+;CHECK: %93:fr64 = COPY %72 | |
+;CHECK: $xmm6 = COPY %93 | |
;CHECK: $esi = MOV32ri 51 | |
-;CHECK: %69:fr64 = MOVSDrm_alt %fixed-stack.2, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.2) | |
-;CHECK: %97:fr64 = COPY %69 | |
-;CHECK: $xmm7 = COPY %97 | |
-;CHECK: STATEPOINT 2, 5, 10, undef %36:gr64, undef $rdi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7, killed $esi, 2, 0, 2, 0, 2, 105, 2, 0, 2, 2, 2, 0, 2, 97, 2, 0, 2, 26, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 2, 2, 2, 2, 46, 2, 0, 2, 20, 2, 0, 2, 0, 2, 4278124286, 2, 4, 1, 8, %stack.6, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.5, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.4, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.7, 0, 2, 7, 2, 0, 2, 3, 2, 51, 2, 1, 2, 4278124286, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (load (s64) from %stack.7), (load (s64) from %stack.6), (load (s64) from %stack.5), (load (s64) from %stack.4), (load (s64) from %stack.2), (load (s64) from %stack.1), (load (s64) from %stack.3), (load (s64) from %fixed-stack.3, align 16), (load (s64) from %fixed-stack.2) | |
+;CHECK: %67:fr64 = MOVSDrm_alt %fixed-stack.2, 1, $noreg, 0, $noreg :: (load (s64) from %fixed-stack.2) | |
+;CHECK: %95:fr64 = COPY %67 | |
+;CHECK: $xmm7 = COPY %95 | |
+;CHECK: STATEPOINT 2, 5, 10, undef %34:gr64, undef $rdi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5, $xmm6, $xmm7, killed $esi, 2, 0, 2, 0, 2, 105, 2, 0, 2, 2, 2, 0, 2, 97, 2, 0, 2, 26, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 2, 2, 2, 2, 46, 2, 0, 2, 20, 2, 0, 2, 0, 2, 4278124286, 2, 4, 1, 8, %stack.6, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.5, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.4, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.3, 0, 2, 7, 2, 0, 2, 4, 1, 8, %fixed-stack.2, 0, 2, 7, 2, 0, 2, 4, 1, 8, %stack.7, 0, 2, 7, 2, 0, 2, 3, 2, 51, 2, 1, 2, 4278124286, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (load (s64) from %stack.7), (load (s64) from %stack.6), (load (s64) from %stack.5), (load (s64) from %stack.4), (load (s64) from %stack.2), (load (s64) from %stack.1), (load (s64) from %stack.3), (load (s64) from %fixed-stack.3, align 16), (load (s64) from %fixed-stack.2) | |
;CHECK: ADJCALLSTACKUP64 8, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp | |
;CHECK: bb.6.bb23 (landing-pad): | |
;CHECK: liveins: $rax, $rdx | |
diff --git a/llvm/test/CodeGen/X86/statepoint-vreg-details.ll b/llvm/test/CodeGen/X86/statepoint-vreg-details.ll | |
index 6594d90089f5..abfc869b37fe 100644 | |
--- a/llvm/test/CodeGen/X86/statepoint-vreg-details.ll | |
+++ b/llvm/test/CodeGen/X86/statepoint-vreg-details.ll | |
@@ -85,16 +85,15 @@ define i32 addrspace(1)* @test_alloca(i32 addrspace(1)* %ptr) gc "statepoint-exa | |
; CHECK-VREG-LABEL: name: test_alloca | |
; CHECK-VREG: %0:gr64 = COPY $rdi | |
; CHECK-VREG: MOV64mr %stack.0.alloca, 1, $noreg, 0, $noreg, %0 :: (store (s64) into %ir.alloca) | |
-; CHECK-VREG: %1:gr64 = STATEPOINT 0, 0, 0, @return_i1, 2, 0, 2, 0, 2, 0, 2, 1, %0(tied-def 0), 2, 1, 0, %stack.0.alloca, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp, implicit-def $al :: (volatile load store (s64) on %stack.0.alloca) | |
-; CHECK-VREG: %2:gr8 = COPY $al | |
-; CHECK-VREG: %3:gr64 = MOV64rm %stack.0.alloca, 1, $noreg, 0, $noreg :: (dereferenceable load (s64) from %ir.alloca) | |
+; CHECK-VREG: %1:gr64 = STATEPOINT 0, 0, 0, @return_i1, 2, 0, 2, 0, 2, 0, 2, 1, %0(tied-def 0), 2, 1, 0, %stack.0.alloca, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s64) on %stack.0.alloca) | |
+; CHECK-VREG: %2:gr64 = MOV64rm %stack.0.alloca, 1, $noreg, 0, $noreg :: (dereferenceable load (s64) from %ir.alloca) | |
; CHECK-VREG: $rdi = COPY %1 | |
; CHECK-VREG: CALL64pcrel32 @consume, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp | |
; CHECK-PREG-LABEL: name: test_alloca | |
; CHECK-PREG: renamable $rbx = COPY $rdi | |
; CHECK-PREG: MOV64mr %stack.0.alloca, 1, $noreg, 0, $noreg, renamable $rbx :: (store (s64) into %ir.alloca) | |
-; CHECK-PREG: renamable $rbx = STATEPOINT 0, 0, 0, @return_i1, 2, 0, 2, 0, 2, 0, 2, 1, killed renamable $rbx(tied-def 0), 2, 1, 0, %stack.0.alloca, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp, implicit-def dead $al :: (volatile load store (s64) on %stack.0.alloca) | |
+; CHECK-PREG: renamable $rbx = STATEPOINT 0, 0, 0, @return_i1, 2, 0, 2, 0, 2, 0, 2, 1, killed renamable $rbx(tied-def 0), 2, 1, 0, %stack.0.alloca, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s64) on %stack.0.alloca) | |
; CHECK-PREG: renamable $r14 = MOV64rm %stack.0.alloca, 1, $noreg, 0, $noreg :: (dereferenceable load (s64) from %ir.alloca) | |
; CHECK-PREG: $rdi = COPY killed renamable $rbx | |
; CHECK-PREG: CALL64pcrel32 @consume, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp | |
diff --git a/llvm/test/CodeGen/X86/statepoint-vreg-invoke.ll b/llvm/test/CodeGen/X86/statepoint-vreg-invoke.ll | |
index dd9e92564b07..5daa6ead451f 100644 | |
--- a/llvm/test/CodeGen/X86/statepoint-vreg-invoke.ll | |
+++ b/llvm/test/CodeGen/X86/statepoint-vreg-invoke.ll | |
@@ -123,7 +123,7 @@ define void @test_duplicate_ir_values() gc "statepoint-example" personality i32* | |
; CHECK: bb.0.entry: | |
; CHECK: renamable $rax = MOV64rm undef renamable $rax, 1, $noreg, 0, $noreg :: (load (s64) from `i8 addrspace(1)* addrspace(1)* undef`, addrspace 1) | |
; CHECK: MOV64mr %stack.0, 1, $noreg, 0, $noreg, killed renamable $rax :: (store (s64) into %stack.0) | |
-; CHECK: STATEPOINT 1, 16, 5, undef renamable $rax, undef $edi, undef $rsi, undef $edx, undef $ecx, undef $r8d, 2, 0, 2, 0, 2, 0, 2, 1, 1, 8, %stack.0, 0, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp, implicit-def dead $eax :: (volatile load store (s64) on %stack.0) | |
+; CHECK: STATEPOINT 1, 16, 5, undef renamable $rax, undef $edi, undef $rsi, undef $edx, undef $ecx, undef $r8d, 2, 0, 2, 0, 2, 0, 2, 1, 1, 8, %stack.0, 0, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s64) on %stack.0) | |
; CHECK: JMP_1 %bb.1 | |
; CHECK: bb.1.normal_continue: | |
; CHECK: renamable $rbx = MOV64rm %stack.0, 1, $noreg, 0, $noreg :: (load (s64) from %stack.0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment