@@ -29,33 +29,40 @@ define void @foo() local_unnamed_addr {
2929; X86-NEXT: .cfi_offset %edi, -16
3030; X86-NEXT: .cfi_offset %ebx, -12
3131; X86-NEXT: .cfi_offset %ebp, -8
32- ; X86-NEXT: movsbl var_27, %eax
33- ; X86-NEXT: movzwl var_2, %ebx
34- ; X86-NEXT: movl var_310, %ecx
35- ; X86-NEXT: imull %eax, %ecx
36- ; X86-NEXT: addl var_24, %ecx
37- ; X86-NEXT: movl $4194303, %esi # imm = 0x3FFFFF
38- ; X86-NEXT: andl obj, %esi
32+ ; X86-NEXT: movl obj, %esi
3933; X86-NEXT: leal (%esi,%esi), %edx
40- ; X86-NEXT: subl %eax, %edx
41- ; X86-NEXT: movl %edx, %edi
42- ; X86-NEXT: subl %ebx, %edi
43- ; X86-NEXT: imull %edi, %ecx
34+ ; X86-NEXT: movzwl var_2, %eax
35+ ; X86-NEXT: movb var_310, %ch
36+ ; X86-NEXT: movsbl var_27, %ebx
37+ ; X86-NEXT: subb %bl, %dl
38+ ; X86-NEXT: movb %dl, %cl
39+ ; X86-NEXT: subb %al, %cl
40+ ; X86-NEXT: movl %eax, %ebp
41+ ; X86-NEXT: movb %ch, %al
42+ ; X86-NEXT: mulb %bl
43+ ; X86-NEXT: addb var_24, %al
44+ ; X86-NEXT: mulb %cl
45+ ; X86-NEXT: movl %eax, %ecx
4446; X86-NEXT: addb $113, %cl
45- ; X86-NEXT: movl $9, %ebx
46- ; X86-NEXT: xorl %ebp , %ebp
47- ; X86-NEXT: shldl %cl, %ebx , %ebp
48- ; X86-NEXT: shll %cl, %ebx
47+ ; X86-NEXT: movl $9, %eax
48+ ; X86-NEXT: xorl %edi , %edi
49+ ; X86-NEXT: shldl %cl, %eax , %edi
50+ ; X86-NEXT: shll %cl, %eax
4951; X86-NEXT: testb $32, %cl
50- ; X86-NEXT: cmovnel %ebx , %ebp
52+ ; X86-NEXT: cmovnel %eax , %edi
5153; X86-NEXT: movl $0, %ecx
52- ; X86-NEXT: cmovnel %ecx, %ebx
53- ; X86-NEXT: cmpl %esi, %edi
54- ; X86-NEXT: movl %ebp, var_50+4
55- ; X86-NEXT: movl %ebx, var_50
54+ ; X86-NEXT: cmovnel %ecx, %eax
55+ ; X86-NEXT: andl $4194303, %esi # imm = 0x3FFFFF
56+ ; X86-NEXT: leal (%esi,%esi), %ecx
57+ ; X86-NEXT: subl %ebx, %ecx
58+ ; X86-NEXT: subl %ebp, %ecx
59+ ; X86-NEXT: cmpl %esi, %ecx
60+ ; X86-NEXT: movl %edi, var_50+4
61+ ; X86-NEXT: movl %eax, var_50
5662; X86-NEXT: setge var_205
57- ; X86-NEXT: imull %eax, %edx
58- ; X86-NEXT: movb %dl, var_218
63+ ; X86-NEXT: movl %edx, %eax
64+ ; X86-NEXT: mulb %bl
65+ ; X86-NEXT: movb %al, var_218
5966; X86-NEXT: popl %esi
6067; X86-NEXT: .cfi_def_cfa_offset 16
6168; X86-NEXT: popl %edi
@@ -68,27 +75,33 @@ define void @foo() local_unnamed_addr {
6875;
6976; X64-LABEL: foo:
7077; X64: # %bb.0: # %entry
71- ; X64-NEXT: movsbl var_27(%rip), %eax
72- ; X64-NEXT: movzwl var_2(%rip), %edx
73- ; X64-NEXT: movl var_310(%rip), %ecx
74- ; X64-NEXT: imull %eax, %ecx
75- ; X64-NEXT: addl var_24(%rip), %ecx
76- ; X64-NEXT: movl $4194303, %esi # imm = 0x3FFFFF
77- ; X64-NEXT: andl obj(%rip), %esi
78- ; X64-NEXT: leal (%rsi,%rsi), %edi
79- ; X64-NEXT: subl %eax, %edi
80- ; X64-NEXT: movl %edi, %r8d
81- ; X64-NEXT: subl %edx, %r8d
82- ; X64-NEXT: imull %r8d, %ecx
83- ; X64-NEXT: addb $113, %cl
84- ; X64-NEXT: movl $9, %edx
78+ ; X64-NEXT: movl obj(%rip), %esi
79+ ; X64-NEXT: leal (%rsi,%rsi), %edx
80+ ; X64-NEXT: movzwl var_2(%rip), %ecx
81+ ; X64-NEXT: movzwl %cx, %r8d
82+ ; X64-NEXT: movzbl var_310(%rip), %eax
83+ ; X64-NEXT: movsbl var_27(%rip), %edi
84+ ; X64-NEXT: subb %dil, %dl
85+ ; X64-NEXT: movl %edx, %r9d
86+ ; X64-NEXT: subb %cl, %r9b
87+ ; X64-NEXT: mulb %dil
88+ ; X64-NEXT: addb var_24(%rip), %al
89+ ; X64-NEXT: mulb %r9b
90+ ; X64-NEXT: # kill: def $al killed $al def $rax
91+ ; X64-NEXT: leal 113(%rax), %ecx
92+ ; X64-NEXT: movl $9, %eax
8593; X64-NEXT: # kill: def $cl killed $cl killed $ecx
86- ; X64-NEXT: shlq %cl, %rdx
87- ; X64-NEXT: movq %rdx, var_50(%rip)
88- ; X64-NEXT: cmpl %esi, %r8d
94+ ; X64-NEXT: shlq %cl, %rax
95+ ; X64-NEXT: movq %rax, var_50(%rip)
96+ ; X64-NEXT: andl $4194303, %esi # imm = 0x3FFFFF
97+ ; X64-NEXT: leal (%rsi,%rsi), %eax
98+ ; X64-NEXT: subl %edi, %eax
99+ ; X64-NEXT: subl %r8d, %eax
100+ ; X64-NEXT: cmpl %esi, %eax
89101; X64-NEXT: setge var_205(%rip)
90- ; X64-NEXT: imull %eax, %edi
91- ; X64-NEXT: movb %dil, var_218(%rip)
102+ ; X64-NEXT: movl %edx, %eax
103+ ; X64-NEXT: mulb %dil
104+ ; X64-NEXT: movb %al, var_218(%rip)
92105; X64-NEXT: retq
93106 entry:
94107 %bf.load = load i32 , ptr @obj , align 8
0 commit comments