Skip to content

Commit 621183c

Browse files
committed
[X86] Add test case showing failure to remove unnecessary zext from address math
Thanks to @yubingex007-a11y for the original test case
1 parent 5112186 commit 621183c

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86
3+
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
4+
5+
%structA = type { %classB, float, i16, i8, i32 }
6+
%classB = type { double, double, double }
7+
8+
define double @zext_shl_mul(ptr %a0, ptr %a1) {
9+
; X86-LABEL: zext_shl_mul:
10+
; X86: # %bb.0:
11+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
12+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
13+
; X86-NEXT: movzwl (%ecx), %ecx
14+
; X86-NEXT: leal (%ecx,%ecx,8), %ecx
15+
; X86-NEXT: fldl 16(%eax,%ecx,4)
16+
; X86-NEXT: retl
17+
;
18+
; X64-LABEL: zext_shl_mul:
19+
; X64: # %bb.0:
20+
; X64-NEXT: movzwl (%rsi), %eax
21+
; X64-NEXT: leaq (%rax,%rax,4), %rax
22+
; X64-NEXT: movl %eax, %eax
23+
; X64-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
24+
; X64-NEXT: retq
25+
%ld = load i16, ptr %a1, align 2
26+
%zext = zext i16 %ld to i64
27+
%gep = getelementptr inbounds %structA, ptr %a0, i64 %zext, i32 0, i32 2
28+
%res = load double, ptr %gep, align 8
29+
ret double %res
30+
}

0 commit comments

Comments
 (0)