[SystemZ] Fix some embarrassing test typos
[oota-llvm.git] / test / CodeGen / SystemZ / int-conv-04.ll
1 ; Test zero extensions from a byte to an i64.
2 ;
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5 ; Test register extension, starting with an i32.
6 define i64 @f1(i32 %a) {
7 ; CHECK: f1:
8 ; CHECK: llgcr %r2, %r2
9 ; CHECK: br %r14
10   %byte = trunc i32 %a to i8
11   %ext = zext i8 %byte to i64
12   ret i64 %ext
13 }
14
15 ; ...and again with an i64.
16 define i64 @f2(i64 %a) {
17 ; CHECK: f2:
18 ; CHECK: llgcr %r2, %r2
19 ; CHECK: br %r14
20   %byte = trunc i64 %a to i8
21   %ext = zext i8 %byte to i64
22   ret i64 %ext
23 }
24
25 ; Check ANDs that are equivalent to zero extension.
26 define i64 @f3(i64 %a) {
27 ; CHECK: f3:
28 ; CHECK: llgcr %r2, %r2
29 ; CHECK: br %r14
30   %ext = and i64 %a, 255
31   ret i64 %ext
32 }
33
34 ; Check LLGC with no displacement.
35 define i64 @f4(i8 *%src) {
36 ; CHECK: f4:
37 ; CHECK: llgc %r2, 0(%r2)
38 ; CHECK: br %r14
39   %byte = load i8 *%src
40   %ext = zext i8 %byte to i64
41   ret i64 %ext
42 }
43
44 ; Check the high end of the LLGC range.
45 define i64 @f5(i8 *%src) {
46 ; CHECK: f5:
47 ; CHECK: llgc %r2, 524287(%r2)
48 ; CHECK: br %r14
49   %ptr = getelementptr i8 *%src, i64 524287
50   %byte = load i8 *%ptr
51   %ext = zext i8 %byte to i64
52   ret i64 %ext
53 }
54
55 ; Check the next byte up, which needs separate address logic.
56 ; Other sequences besides this one would be OK.
57 define i64 @f6(i8 *%src) {
58 ; CHECK: f6:
59 ; CHECK: agfi %r2, 524288
60 ; CHECK: llgc %r2, 0(%r2)
61 ; CHECK: br %r14
62   %ptr = getelementptr i8 *%src, i64 524288
63   %byte = load i8 *%ptr
64   %ext = zext i8 %byte to i64
65   ret i64 %ext
66 }
67
68 ; Check the high end of the negative LLGC range.
69 define i64 @f7(i8 *%src) {
70 ; CHECK: f7:
71 ; CHECK: llgc %r2, -1(%r2)
72 ; CHECK: br %r14
73   %ptr = getelementptr i8 *%src, i64 -1
74   %byte = load i8 *%ptr
75   %ext = zext i8 %byte to i64
76   ret i64 %ext
77 }
78
79 ; Check the low end of the LLGC range.
80 define i64 @f8(i8 *%src) {
81 ; CHECK: f8:
82 ; CHECK: llgc %r2, -524288(%r2)
83 ; CHECK: br %r14
84   %ptr = getelementptr i8 *%src, i64 -524288
85   %byte = load i8 *%ptr
86   %ext = zext i8 %byte to i64
87   ret i64 %ext
88 }
89
90 ; Check the next byte down, which needs separate address logic.
91 ; Other sequences besides this one would be OK.
92 define i64 @f9(i8 *%src) {
93 ; CHECK: f9:
94 ; CHECK: agfi %r2, -524289
95 ; CHECK: llgc %r2, 0(%r2)
96 ; CHECK: br %r14
97   %ptr = getelementptr i8 *%src, i64 -524289
98   %byte = load i8 *%ptr
99   %ext = zext i8 %byte to i64
100   ret i64 %ext
101 }
102
103 ; Check that LLGC allows an index
104 define i64 @f10(i64 %src, i64 %index) {
105 ; CHECK: f10:
106 ; CHECK: llgc %r2, 524287(%r3,%r2)
107 ; CHECK: br %r14
108   %add1 = add i64 %src, %index
109   %add2 = add i64 %add1, 524287
110   %ptr = inttoptr i64 %add2 to i8 *
111   %byte = load i8 *%ptr
112   %ext = zext i8 %byte to i64
113   ret i64 %ext
114 }