• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test if we can read store instructions.
2
3; RUN: %p2i -i %s --insts --no-local-syms | FileCheck %s
4; RUN:   %p2i -i %s --args -notranslate -timing | \
5; RUN:   FileCheck --check-prefix=NOIR %s
6
7define internal void @store_i8(i32 %addr) {
8entry:
9  %addr_i8 = inttoptr i32 %addr to i8*
10  store i8 3, i8* %addr_i8, align 1
11  ret void
12
13; CHECK:      __0:
14; CHECK-NEXT:   store i8 3, i8* %__0, align 1
15; CHECK-NEXT:   ret void
16}
17
18define internal void @store_i16(i32 %addr) {
19entry:
20  %addr_i16 = inttoptr i32 %addr to i16*
21  store i16 5, i16* %addr_i16, align 1
22  ret void
23
24; CHECK:      __0:
25; CHECK-NEXT:   store i16 5, i16* %__0, align 1
26; CHECK-NEXT:   ret void
27}
28
29define internal void @store_i32(i32 %addr, i32 %v) {
30entry:
31  %addr_i32 = inttoptr i32 %addr to i32*
32  store i32 %v, i32* %addr_i32, align 1
33  ret void
34
35; CHECK:      __0:
36; CHECK-NEXT:   store i32 %__1, i32* %__0, align 1
37; CHECK-NEXT:   ret void
38}
39
40define internal void @store_i64(i32 %addr, i64 %v) {
41entry:
42  %addr_i64 = inttoptr i32 %addr to i64*
43  store i64 %v, i64* %addr_i64, align 1
44  ret void
45
46; CHECK:      __0:
47; CHECK-NEXT:   store i64 %__1, i64* %__0, align 1
48; CHECK-NEXT:   ret void
49}
50
51define internal void @store_float_a1(i32 %addr, float %v) {
52entry:
53  %addr_float = inttoptr i32 %addr to float*
54  store float %v, float* %addr_float, align 1
55  ret void
56
57; TODO(kschimpf) Fix store alignment in ICE to allow non-default.
58
59; CHECK:      __0:
60; CHECK-NEXT:   store float %__1, float* %__0, align 4
61; CHECK-NEXT:   ret void
62}
63
64define internal void @store_float_a4(i32 %addr, float %v) {
65entry:
66  %addr_float = inttoptr i32 %addr to float*
67  store float %v, float* %addr_float, align 4
68  ret void
69
70; CHECK:       __0:
71; CHECK-NEXT:   store float %__1, float* %__0, align 4
72; CHECK-NEXT:   ret void
73}
74
75define internal void @store_double_a1(i32 %addr, double %v) {
76entry:
77  %addr_double = inttoptr i32 %addr to double*
78  store double %v, double* %addr_double, align 1
79  ret void
80
81; TODO(kschimpf) Fix store alignment in ICE to allow non-default.
82
83; CHECK:      __0:
84; CHECK-NEXT:   store double %__1, double* %__0, align 8
85; CHECK-NEXT:   ret void
86}
87
88define internal void @store_double_a8(i32 %addr, double %v) {
89entry:
90  %addr_double = inttoptr i32 %addr to double*
91  store double %v, double* %addr_double, align 8
92  ret void
93
94; CHECK:      __0:
95; CHECK-NEXT:   store double %__1, double* %__0, align 8
96; CHECK-NEXT:   ret void
97}
98
99define internal void @store_v16xI8(i32 %addr, <16 x i8> %v) {
100  %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>*
101  store <16 x i8> %v, <16 x i8>* %addr_v16xI8, align 1
102  ret void
103
104; CHECK:      __0:
105; CHECK-NEXT:   store <16 x i8> %__1, <16 x i8>* %__0, align 1
106; CHECK-NEXT:   ret void
107}
108
109define internal void @store_v8xI16(i32 %addr, <8 x i16> %v) {
110  %addr_v8xI16 = inttoptr i32 %addr to <8 x i16>*
111  store <8 x i16> %v, <8 x i16>* %addr_v8xI16, align 2
112  ret void
113
114; CHECK:      __0:
115; CHECK-NEXT:   store <8 x i16> %__1, <8 x i16>* %__0, align 2
116; CHECK-NEXT:   ret void
117}
118
119define internal void @store_v4xI32(i32 %addr, <4 x i32> %v) {
120  %addr_v4xI32 = inttoptr i32 %addr to <4 x i32>*
121  store <4 x i32> %v, <4 x i32>* %addr_v4xI32, align 4
122  ret void
123
124; CHECK:      __0:
125; CHECK-NEXT:   store <4 x i32> %__1, <4 x i32>* %__0, align 4
126; CHECK-NEXT:   ret void
127}
128
129define internal void @store_v4xFloat(i32 %addr, <4 x float> %v) {
130  %addr_v4xFloat = inttoptr i32 %addr to <4 x float>*
131  store <4 x float> %v, <4 x float>* %addr_v4xFloat, align 4
132  ret void
133
134; CHECK:      __0:
135; CHECK-NEXT:   store <4 x float> %__1, <4 x float>* %__0, align 4
136; CHECK-NEXT:   ret void
137}
138
139; NOIR: Total across all functions
140