Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / h-register-addressing-32.ll
blobeee1fd6d522ce44671fb3f8dc53b790e8d17bba3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-- -mattr=-bmi | FileCheck %s
4 ; Use h-register extract and zero-extend.
6 define double @foo8(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
7 ; CHECK-LABEL: foo8:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    movzbl %dh, %ecx
10 ; CHECK-NEXT:    fldl (%eax,%ecx,8)
11 ; CHECK-NEXT:    retl
12   %t0 = lshr i32 %x, 8
13   %t1 = and i32 %t0, 255
14   %t2 = getelementptr double, ptr %p, i32 %t1
15   %t3 = load double, ptr %t2, align 8
16   ret double %t3
19 define float @foo4(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
20 ; CHECK-LABEL: foo4:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    movzbl %dh, %ecx
23 ; CHECK-NEXT:    flds (%eax,%ecx,4)
24 ; CHECK-NEXT:    retl
25   %t0 = lshr i32 %x, 8
26   %t1 = and i32 %t0, 255
27   %t2 = getelementptr float, ptr %p, i32 %t1
28   %t3 = load float, ptr %t2, align 8
29   ret float %t3
32 define i16 @foo2(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
33 ; CHECK-LABEL: foo2:
34 ; CHECK:       # %bb.0:
35 ; CHECK-NEXT:    movzbl %dh, %ecx
36 ; CHECK-NEXT:    movzwl (%eax,%ecx,2), %eax
37 ; CHECK-NEXT:    retl
38   %t0 = lshr i32 %x, 8
39   %t1 = and i32 %t0, 255
40   %t2 = getelementptr i16, ptr %p, i32 %t1
41   %t3 = load i16, ptr %t2, align 8
42   ret i16 %t3
45 define i8 @foo1(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
46 ; CHECK-LABEL: foo1:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    movzbl %dh, %ecx
49 ; CHECK-NEXT:    movzbl (%eax,%ecx), %eax
50 ; CHECK-NEXT:    retl
51   %t0 = lshr i32 %x, 8
52   %t1 = and i32 %t0, 255
53   %t2 = getelementptr i8, ptr %p, i32 %t1
54   %t3 = load i8, ptr %t2, align 8
55   ret i8 %t3
58 define i8 @bar8(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
59 ; CHECK-LABEL: bar8:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    movzbl %dh, %ecx
62 ; CHECK-NEXT:    movzbl (%eax,%ecx,8), %eax
63 ; CHECK-NEXT:    retl
64   %t0 = lshr i32 %x, 5
65   %t1 = and i32 %t0, 2040
66   %t2 = getelementptr i8, ptr %p, i32 %t1
67   %t3 = load i8, ptr %t2, align 8
68   ret i8 %t3
71 define i8 @bar4(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
72 ; CHECK-LABEL: bar4:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    movzbl %dh, %ecx
75 ; CHECK-NEXT:    movzbl (%eax,%ecx,4), %eax
76 ; CHECK-NEXT:    retl
77   %t0 = lshr i32 %x, 6
78   %t1 = and i32 %t0, 1020
79   %t2 = getelementptr i8, ptr %p, i32 %t1
80   %t3 = load i8, ptr %t2, align 8
81   ret i8 %t3
84 define i8 @bar2(ptr nocapture inreg %p, i32 inreg %x) nounwind readonly {
85 ; CHECK-LABEL: bar2:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    movzbl %dh, %ecx
88 ; CHECK-NEXT:    movzbl (%eax,%ecx,2), %eax
89 ; CHECK-NEXT:    retl
90   %t0 = lshr i32 %x, 7
91   %t1 = and i32 %t0, 510
92   %t2 = getelementptr i8, ptr %p, i32 %t1
93   %t3 = load i8, ptr %t2, align 8
94   ret i8 %t3