Skip to content

Commit 08380af

Browse files
committed
[X86] Add PR13897 test case (i128 mul on i686)
llvm-svn: 356786
1 parent 280a6b0 commit 08380af

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

llvm/test/CodeGen/X86/mul128.ll

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,68 @@ define i128 @foo(i128 %t, i128 %u) {
9999
%k = mul i128 %t, %u
100100
ret i128 %k
101101
}
102+
103+
@aaa = external global i128
104+
@bbb = external global i128
105+
106+
define void @PR13897() nounwind {
107+
; X64-LABEL: PR13897:
108+
; X64: # %bb.0: # %"0x0"
109+
; X64-NEXT: movl {{.*}}(%rip), %ecx
110+
; X64-NEXT: movabsq $4294967297, %rdx # imm = 0x100000001
111+
; X64-NEXT: movq %rcx, %rax
112+
; X64-NEXT: mulq %rdx
113+
; X64-NEXT: addq %rcx, %rdx
114+
; X64-NEXT: shlq $32, %rcx
115+
; X64-NEXT: addq %rcx, %rdx
116+
; X64-NEXT: movq %rax, {{.*}}(%rip)
117+
; X64-NEXT: movq %rdx, aaa+{{.*}}(%rip)
118+
; X64-NEXT: retq
119+
;
120+
; X86-LABEL: PR13897:
121+
; X86: # %bb.0: # %"0x0"
122+
; X86-NEXT: pushl %ebp
123+
; X86-NEXT: pushl %ebx
124+
; X86-NEXT: pushl %edi
125+
; X86-NEXT: pushl %esi
126+
; X86-NEXT: pushl %eax
127+
; X86-NEXT: movl bbb, %eax
128+
; X86-NEXT: movl %eax, (%esp) # 4-byte Spill
129+
; X86-NEXT: movl $1, %ebx
130+
; X86-NEXT: mull %ebx
131+
; X86-NEXT: movl %edx, %esi
132+
; X86-NEXT: movl %eax, %edi
133+
; X86-NEXT: xorl %eax, %eax
134+
; X86-NEXT: mull %ebx
135+
; X86-NEXT: movl %eax, %ebx
136+
; X86-NEXT: addl %esi, %ebx
137+
; X86-NEXT: movl %edx, %ebp
138+
; X86-NEXT: adcl $0, %ebp
139+
; X86-NEXT: addl %edi, %ebx
140+
; X86-NEXT: adcl %esi, %ebp
141+
; X86-NEXT: setb %cl
142+
; X86-NEXT: addl %eax, %ebp
143+
; X86-NEXT: movzbl %cl, %eax
144+
; X86-NEXT: adcl %edx, %eax
145+
; X86-NEXT: addl %edi, %ebp
146+
; X86-NEXT: adcl %esi, %eax
147+
; X86-NEXT: addl (%esp), %eax # 4-byte Folded Reload
148+
; X86-NEXT: movl %edi, aaa
149+
; X86-NEXT: movl %ebx, aaa+4
150+
; X86-NEXT: movl %ebp, aaa+8
151+
; X86-NEXT: movl %eax, aaa+12
152+
; X86-NEXT: addl $4, %esp
153+
; X86-NEXT: popl %esi
154+
; X86-NEXT: popl %edi
155+
; X86-NEXT: popl %ebx
156+
; X86-NEXT: popl %ebp
157+
; X86-NEXT: retl
158+
"0x0":
159+
%0 = load i128, i128* @bbb
160+
%1 = and i128 %0, 4294967295
161+
%2 = shl i128 %0, 96
162+
%3 = mul i128 %1, 18446744078004518913
163+
%4 = add i128 %3, %2
164+
store i128 %4, i128* @aaa
165+
ret void
166+
}

0 commit comments

Comments
 (0)