blob: 087e750f9aecc66ab89f67dece7faecb805d6eb6 [file] [log] [blame]
Karl Schimpf41689df2014-09-10 14:36:07 -07001; Test if we can read load instructions.
2
Karl Schimpf2a5324a2014-09-25 09:37:49 -07003; RUN: %p2i --no-local-syms -i %s --insts | FileCheck %s
Karl Schimpf6fcbddd2014-11-06 09:49:24 -08004; RUN: %if --need=allow_disable_ir_gen --command \
5; RUN: %p2i -i %s --args -notranslate -timing -no-ir-gen \
6; RUN: | %if --need=allow_disable_ir_gen --command \
7; RUN: FileCheck --check-prefix=NOIR %s
Karl Schimpf41689df2014-09-10 14:36:07 -07008
9define i32 @load_i8(i32 %addr) {
10entry:
11 %addr_i8 = inttoptr i32 %addr to i8*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070012 %v = load i8, i8* %addr_i8, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070013 %r = sext i8 %v to i32
14 ret i32 %r
15
16; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070017; CHECK-NEXT: %__1 = load i8, i8* %__0, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070018; CHECK-NEXT: %__2 = sext i8 %__1 to i32
19; CHECK-NEXT: ret i32 %__2
20}
21
22define i32 @load_i16(i32 %addr) {
23entry:
24 %addr_i16 = inttoptr i32 %addr to i16*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070025 %v = load i16, i16* %addr_i16, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070026 %r = sext i16 %v to i32
27 ret i32 %r
28
29; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070030; CHECK-NEXT: %__1 = load i16, i16* %__0, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070031; CHECK-NEXT: %__2 = sext i16 %__1 to i32
32; CHECK-NEXT: ret i32 %__2
33}
34
35define i32 @load_i32(i32 %addr) {
36entry:
37 %addr_i32 = inttoptr i32 %addr to i32*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070038 %v = load i32, i32* %addr_i32, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070039 ret i32 %v
40
41; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070042; CHECK-NEXT: %__1 = load i32, i32* %__0, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070043; CHECK-NEXT: ret i32 %__1
44}
45
46define i64 @load_i64(i32 %addr) {
47entry:
48 %addr_i64 = inttoptr i32 %addr to i64*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070049 %v = load i64, i64* %addr_i64, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070050 ret i64 %v
51
52; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070053; CHECK-NEXT: %__1 = load i64, i64* %__0, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070054; CHECK-NEXT: ret i64 %__1
55}
56
57define float @load_float_a1(i32 %addr) {
58entry:
59 %addr_float = inttoptr i32 %addr to float*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070060 %v = load float, float* %addr_float, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070061 ret float %v
62
63; TODO(kschimpf) Fix load alignment in ICE to allow non-default.
64
65; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070066; CHECK-NEXT: %__1 = load float, float* %__0, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -070067; CHECK-NEXT: ret float %__1
68}
69
70
71define float @load_float_a4(i32 %addr) {
72entry:
73 %addr_float = inttoptr i32 %addr to float*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070074 %v = load float, float* %addr_float, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -070075 ret float %v
76
77; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070078; CHECK-NEXT: %__1 = load float, float* %__0, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -070079; CHECK-NEXT: ret float %__1
80}
81
82define double @load_double_a1(i32 %addr) {
83entry:
84 %addr_double = inttoptr i32 %addr to double*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070085 %v = load double, double* %addr_double, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -070086 ret double %v
87
88; TODO(kschimpf) Fix load alignment in ICE to allow non-default.
89
90; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070091; CHECK-NEXT: %__1 = load double, double* %__0, align 8
Karl Schimpf41689df2014-09-10 14:36:07 -070092; CHECK-NEXT: ret double %__1
93}
94
95
96define double @load_double_a8(i32 %addr) {
97entry:
98 %addr_double = inttoptr i32 %addr to double*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070099 %v = load double, double* %addr_double, align 8
Karl Schimpf41689df2014-09-10 14:36:07 -0700100 ret double %v
101
102; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700103; CHECK-NEXT: %__1 = load double, double* %__0, align 8
Karl Schimpf41689df2014-09-10 14:36:07 -0700104; CHECK-NEXT: ret double %__1
105}
106
107define <16 x i8> @load_v16xI8(i32 %addr) {
108entry:
109 %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700110 %v = load <16 x i8>, <16 x i8>* %addr_v16xI8, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -0700111 ret <16 x i8> %v
112
113; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700114; CHECK-NEXT: %__1 = load <16 x i8>, <16 x i8>* %__0, align 1
Karl Schimpf41689df2014-09-10 14:36:07 -0700115; CHECK-NEXT: ret <16 x i8> %__1
116}
117
118define <8 x i16> @load_v8xI16(i32 %addr) {
119entry:
120 %addr_v8xI16 = inttoptr i32 %addr to <8 x i16>*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700121 %v = load <8 x i16>, <8 x i16>* %addr_v8xI16, align 2
Karl Schimpf41689df2014-09-10 14:36:07 -0700122 ret <8 x i16> %v
123
124; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700125; CHECK-NEXT: %__1 = load <8 x i16>, <8 x i16>* %__0, align 2
Karl Schimpf41689df2014-09-10 14:36:07 -0700126; CHECK-NEXT: ret <8 x i16> %__1
127}
128
129define <4 x i32> @load_v4xI32(i32 %addr) {
130entry:
131 %addr_v4xI32 = inttoptr i32 %addr to <4 x i32>*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700132 %v = load <4 x i32>, <4 x i32>* %addr_v4xI32, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -0700133 ret <4 x i32> %v
134
135; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700136; CHECK-NEXT: %__1 = load <4 x i32>, <4 x i32>* %__0, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -0700137; CHECK-NEXT: ret <4 x i32> %__1
138}
139
140define <4 x float> @load_v4xFloat(i32 %addr) {
141entry:
142 %addr_v4xFloat = inttoptr i32 %addr to <4 x float>*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700143 %v = load <4 x float>, <4 x float>* %addr_v4xFloat, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -0700144 ret <4 x float> %v
145
146; CHECK: __0:
Jim Stichnothe5b58fb2015-06-01 15:17:20 -0700147; CHECK-NEXT: %__1 = load <4 x float>, <4 x float>* %__0, align 4
Karl Schimpf41689df2014-09-10 14:36:07 -0700148; CHECK-NEXT: ret <4 x float> %__1
149}
150
Karl Schimpf6fcbddd2014-11-06 09:49:24 -0800151; NOIR: Total across all functions