@@ -43,83 +43,37 @@ define dso_local void @pr76416() {
4343; CHECK-NEXT: movl %edx, -{{[0-9]+}}(%rsp)
4444; CHECK-NEXT: jmp .LBB0_4
4545entry:
46- %i = alloca i32 , align 4
47- store i32 0 , ptr %i , align 4
46+ %alloca = alloca i32 , align 4
47+ store i32 0 , ptr %alloca , align 4
4848 br label %for.cond
4949
5050for.cond: ; preds = %for.body, %entry
51- %0 = load i32 , ptr %i , align 4
52- %cmp = icmp slt i32 %0 , 4
51+ %load.from.alloca. 0 = load i32 , ptr %alloca , align 4
52+ %cmp = icmp slt i32 %load.from.alloca. 0 , 4
5353 br i1 %cmp , label %for.body , label %for.end
5454
5555for.body: ; preds = %for.cond
5656 call void asm sideeffect "" , "{ax},~{dirflag},~{fpsr},~{flags}" (i8 0 ) nounwind
57- %1 = load i32 , ptr %i , align 4
58- %inc = add nsw i32 %1 , 1
59- store i32 %inc , ptr %i , align 4
57+ %load.from.alloca. 1 = load i32 , ptr %alloca , align 4
58+ %inc = add nsw i32 %load.from.alloca. 1 , 1
59+ store i32 %inc , ptr %alloca , align 4
6060 br label %for.cond
6161
6262for.end: ; preds = %for.cond
63- store i32 0 , ptr %i , align 4
63+ store i32 0 , ptr %alloca , align 4
6464 br label %for.cond1
6565
6666for.cond1: ; preds = %for.cond1, %for.end
6767 call void asm sideeffect "" , "N{dx},~{dirflag},~{fpsr},~{flags}" (i32 poison) nounwind
68- %2 = load ptr , ptr @load_p , align 8
69- %regs = getelementptr inbounds { [4 x i8 ] }, ptr %2 , i32 0 , i32 0
70- %3 = load i32 , ptr %i , align 4
71- %idxprom = sext i32 %3 to i64
68+ %load.from.load_p = load ptr , ptr @load_p , align 8
69+ %regs = getelementptr inbounds { [4 x i8 ] }, ptr %load.from.load_p , i32 0 , i32 0
70+ %load.from.alloca.2 = load i32 , ptr %alloca , align 4
71+ %idxprom = sext i32 %load.from.alloca.2 to i64
7272 %arrayidx = getelementptr inbounds [4 x i8 ], ptr %regs , i64 0 , i64 %idxprom
73- %4 = load i8 , ptr %arrayidx , align 1
74- store i8 %4 , ptr @load_data , align 1
75- %5 = load i32 , ptr %i , align 4
76- %inc5 = add nsw i32 %5 , 1
77- store i32 %inc5 , ptr %i , align 4
73+ %load.with.gep.ptr = load i8 , ptr %arrayidx , align 1
74+ store i8 %load.with.gep.ptr , ptr @load_data , align 1
75+ %load.from.alloca.3 = load i32 , ptr %alloca , align 4
76+ %inc2 = add nsw i32 %load.from.alloca.3 , 1
77+ store i32 %inc2 , ptr %alloca , align 4
7878 br label %for.cond1
7979}
80-
81- ;
82- ; Related reproducer as reported on https://github.com/llvm/llvm-project/commit/0e46b49de43349f8cbb2a7d4c6badef6d16e31ae#commitcomment-136147998
83- ;
84-
85- define void @f (i1 %cmp.not.i.i.i ) {
86- ; CHECK-LABEL: f:
87- ; CHECK: # %bb.0: # %entry
88- ; CHECK-NEXT: pushq %rax
89- ; CHECK-NEXT: .cfi_def_cfa_offset 16
90- ; CHECK-NEXT: movl 0, %eax
91- ; CHECK-NEXT: xorl %ecx, %ecx
92- ; CHECK-NEXT: sarl %cl, %eax
93- ; CHECK-NEXT: movl $1, %edx
94- ; CHECK-NEXT: xorl %ecx, %ecx
95- ; CHECK-NEXT: shrl %cl, %edx
96- ; CHECK-NEXT: imull %eax, %edx
97- ; CHECK-NEXT: movslq %edx, %rsi
98- ; CHECK-NEXT: xorl %eax, %eax
99- ; CHECK-NEXT: xorl %edi, %edi
100- ; CHECK-NEXT: xorl %edx, %edx
101- ; CHECK-NEXT: callq *%rax
102- entry:
103- br label %for.cond10.preheader
104-
105- trap: ; preds = %for.body13
106- unreachable
107-
108- for.cond10.preheader: ; preds = %while.cond.i.i.i, %entry
109- %indvars.iv = phi i64 [ 0 , %entry ], [ 1 , %while.cond.i.i.i ]
110- %0 = trunc i64 %indvars.iv to i32
111- br label %for.body13
112-
113- for.body13: ; preds = %for.cond10.preheader
114- %1 = load i32 , ptr null , align 4
115- %shr = ashr i32 %1 , %0
116- %shr15 = ashr i32 1 , %0
117- %mul16 = mul i32 %shr15 , %shr
118- %conv = sext i32 %mul16 to i64
119- call void null (ptr null , i64 %conv , ptr null )
120- br i1 false , label %while.cond.i.i.i , label %trap
121-
122- while.cond.i.i.i: ; preds = %while.cond.i.i.i, %for.body13
123- br i1 %cmp.not.i.i.i , label %for.cond10.preheader , label %while.cond.i.i.i
124- }
125-
0 commit comments