summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/sink-hoist.ll
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-10-30 22:18:41 +0000
committerDan Gohman <gohman@apple.com>2009-10-30 22:18:41 +0000
commit0115e164bad632572e2cfbaf72f0f0882d5319de (patch)
treee1e3d79537c4854d8ab8a456330534a5fe807054 /test/CodeGen/X86/sink-hoist.ll
parent287db0c23c9188c563cc2ff449733f233535496e (diff)
downloadllvm-0115e164bad632572e2cfbaf72f0f0882d5319de.tar.gz
llvm-0115e164bad632572e2cfbaf72f0f0882d5319de.tar.bz2
llvm-0115e164bad632572e2cfbaf72f0f0882d5319de.tar.xz
Fix MachineLICM to use the correct virtual register class when
unfolding loads for hoisting. getOpcodeAfterMemoryUnfold returns the opcode of the original operation without the load, not the load itself, MachineLICM needs to know the operand index in order to get the correct register class. Extend getOpcodeAfterMemoryUnfold to return this information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85622 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/sink-hoist.ll')
-rw-r--r--test/CodeGen/X86/sink-hoist.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/X86/sink-hoist.ll b/test/CodeGen/X86/sink-hoist.ll
index 1da30ad26f..64d449f678 100644
--- a/test/CodeGen/X86/sink-hoist.ll
+++ b/test/CodeGen/X86/sink-hoist.ll
@@ -120,3 +120,29 @@ return: ; preds = %bb60
declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone
declare <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32>) nounwind readnone
+
+; CodeGen should use the correct register class when extracting
+; a load from a zero-extending load for hoisting.
+
+; CHECK: default_get_pch_validity:
+; CHECK: movl cl_options_count(%rip), %ecx
+
+@cl_options_count = external constant i32 ; <i32*> [#uses=2]
+
+define void @default_get_pch_validity() nounwind {
+entry:
+ %tmp4 = load i32* @cl_options_count, align 4 ; <i32> [#uses=1]
+ %tmp5 = icmp eq i32 %tmp4, 0 ; <i1> [#uses=1]
+ br i1 %tmp5, label %bb6, label %bb2
+
+bb2: ; preds = %bb2, %entry
+ %i.019 = phi i64 [ 0, %entry ], [ %tmp25, %bb2 ] ; <i64> [#uses=1]
+ %tmp25 = add i64 %i.019, 1 ; <i64> [#uses=2]
+ %tmp11 = load i32* @cl_options_count, align 4 ; <i32> [#uses=1]
+ %tmp12 = zext i32 %tmp11 to i64 ; <i64> [#uses=1]
+ %tmp13 = icmp ugt i64 %tmp12, %tmp25 ; <i1> [#uses=1]
+ br i1 %tmp13, label %bb2, label %bb6
+
+bb6: ; preds = %bb2, %entry
+ ret void
+}