Handle logical shift right (at least I hope so :) )
[llvm/msp430.git] / test / CodeGen / X86 / h-register-addressing-64.ll
blobb38e0e478e99b1ec0475fab39f8c51ea08814338
1 ; RUN: llvm-as < %s | llc -march=x86-64 | grep {movzbl  %\[abcd\]h,} | count 7
3 ; Use h-register extract and zero-extend.
5 define double @foo8(double* nocapture inreg %p, i64 inreg %x) nounwind readonly {
6   %t0 = lshr i64 %x, 8
7   %t1 = and i64 %t0, 255
8   %t2 = getelementptr double* %p, i64 %t1
9   %t3 = load double* %t2, align 8
10   ret double %t3
12 define float @foo4(float* nocapture inreg %p, i64 inreg %x) nounwind readonly {
13   %t0 = lshr i64 %x, 8
14   %t1 = and i64 %t0, 255
15   %t2 = getelementptr float* %p, i64 %t1
16   %t3 = load float* %t2, align 8
17   ret float %t3
19 define i16 @foo2(i16* nocapture inreg %p, i64 inreg %x) nounwind readonly {
20   %t0 = lshr i64 %x, 8
21   %t1 = and i64 %t0, 255
22   %t2 = getelementptr i16* %p, i64 %t1
23   %t3 = load i16* %t2, align 8
24   ret i16 %t3
26 define i8 @foo1(i8* nocapture inreg %p, i64 inreg %x) nounwind readonly {
27   %t0 = lshr i64 %x, 8
28   %t1 = and i64 %t0, 255
29   %t2 = getelementptr i8* %p, i64 %t1
30   %t3 = load i8* %t2, align 8
31   ret i8 %t3
33 define i8 @bar8(i8* nocapture inreg %p, i64 inreg %x) nounwind readonly {
34   %t0 = lshr i64 %x, 5
35   %t1 = and i64 %t0, 2040
36   %t2 = getelementptr i8* %p, i64 %t1
37   %t3 = load i8* %t2, align 8
38   ret i8 %t3
40 define i8 @bar4(i8* nocapture inreg %p, i64 inreg %x) nounwind readonly {
41   %t0 = lshr i64 %x, 6
42   %t1 = and i64 %t0, 1020
43   %t2 = getelementptr i8* %p, i64 %t1
44   %t3 = load i8* %t2, align 8
45   ret i8 %t3
47 define i8 @bar2(i8* nocapture inreg %p, i64 inreg %x) nounwind readonly {
48   %t0 = lshr i64 %x, 7
49   %t1 = and i64 %t0, 510
50   %t2 = getelementptr i8* %p, i64 %t1
51   %t3 = load i8* %t2, align 8
52   ret i8 %t3