1; RUN: llc < %s | FileCheck %s
2
3target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
4target triple = "powerpc64-unknown-linux-gnu"
5
6define i8* @test_stbu(i8* %base, i8 zeroext %val) nounwind {
7entry:
8  %arrayidx = getelementptr inbounds i8* %base, i64 16
9  store i8 %val, i8* %arrayidx, align 1
10  ret i8* %arrayidx
11}
12; CHECK: @test_stbu
13; CHECK: %entry
14; CHECK-NEXT: stbu
15; CHECK-NEXT: blr
16
17define i8* @test_stbux(i8* %base, i8 zeroext %val, i64 %offset) nounwind {
18entry:
19  %arrayidx = getelementptr inbounds i8* %base, i64 %offset
20  store i8 %val, i8* %arrayidx, align 1
21  ret i8* %arrayidx
22}
23; CHECK: @test_stbux
24; CHECK: %entry
25; CHECK-NEXT: stbux
26; CHECK-NEXT: blr
27
28define i16* @test_sthu(i16* %base, i16 zeroext %val) nounwind {
29entry:
30  %arrayidx = getelementptr inbounds i16* %base, i64 16
31  store i16 %val, i16* %arrayidx, align 2
32  ret i16* %arrayidx
33}
34; CHECK: @test_sthu
35; CHECK: %entry
36; CHECK-NEXT: sthu
37; CHECK-NEXT: blr
38
39define i16* @test_sthux(i16* %base, i16 zeroext %val, i64 %offset) nounwind {
40entry:
41  %arrayidx = getelementptr inbounds i16* %base, i64 %offset
42  store i16 %val, i16* %arrayidx, align 2
43  ret i16* %arrayidx
44}
45; CHECK: @test_sthux
46; CHECK: %entry
47; CHECK-NEXT: sldi
48; CHECK-NEXT: sthux
49; CHECK-NEXT: blr
50
51define i32* @test_stwu(i32* %base, i32 zeroext %val) nounwind {
52entry:
53  %arrayidx = getelementptr inbounds i32* %base, i64 16
54  store i32 %val, i32* %arrayidx, align 4
55  ret i32* %arrayidx
56}
57; CHECK: @test_stwu
58; CHECK: %entry
59; CHECK-NEXT: stwu
60; CHECK-NEXT: blr
61
62define i32* @test_stwux(i32* %base, i32 zeroext %val, i64 %offset) nounwind {
63entry:
64  %arrayidx = getelementptr inbounds i32* %base, i64 %offset
65  store i32 %val, i32* %arrayidx, align 4
66  ret i32* %arrayidx
67}
68; CHECK: @test_stwux
69; CHECK: %entry
70; CHECK-NEXT: sldi
71; CHECK-NEXT: stwux
72; CHECK-NEXT: blr
73
74define i8* @test_stbu8(i8* %base, i64 %val) nounwind {
75entry:
76  %conv = trunc i64 %val to i8
77  %arrayidx = getelementptr inbounds i8* %base, i64 16
78  store i8 %conv, i8* %arrayidx, align 1
79  ret i8* %arrayidx
80}
81; CHECK: @test_stbu8
82; CHECK: %entry
83; CHECK-NEXT: stbu
84; CHECK-NEXT: blr
85
86define i8* @test_stbux8(i8* %base, i64 %val, i64 %offset) nounwind {
87entry:
88  %conv = trunc i64 %val to i8
89  %arrayidx = getelementptr inbounds i8* %base, i64 %offset
90  store i8 %conv, i8* %arrayidx, align 1
91  ret i8* %arrayidx
92}
93; CHECK: @test_stbux8
94; CHECK: %entry
95; CHECK-NEXT: stbux
96; CHECK-NEXT: blr
97
98define i16* @test_sthu8(i16* %base, i64 %val) nounwind {
99entry:
100  %conv = trunc i64 %val to i16
101  %arrayidx = getelementptr inbounds i16* %base, i64 16
102  store i16 %conv, i16* %arrayidx, align 2
103  ret i16* %arrayidx
104}
105; CHECK: @test_sthu
106; CHECK: %entry
107; CHECK-NEXT: sthu
108; CHECK-NEXT: blr
109
110define i16* @test_sthux8(i16* %base, i64 %val, i64 %offset) nounwind {
111entry:
112  %conv = trunc i64 %val to i16
113  %arrayidx = getelementptr inbounds i16* %base, i64 %offset
114  store i16 %conv, i16* %arrayidx, align 2
115  ret i16* %arrayidx
116}
117; CHECK: @test_sthux
118; CHECK: %entry
119; CHECK-NEXT: sldi
120; CHECK-NEXT: sthux
121; CHECK-NEXT: blr
122
123define i32* @test_stwu8(i32* %base, i64 %val) nounwind {
124entry:
125  %conv = trunc i64 %val to i32
126  %arrayidx = getelementptr inbounds i32* %base, i64 16
127  store i32 %conv, i32* %arrayidx, align 4
128  ret i32* %arrayidx
129}
130; CHECK: @test_stwu
131; CHECK: %entry
132; CHECK-NEXT: stwu
133; CHECK-NEXT: blr
134
135define i32* @test_stwux8(i32* %base, i64 %val, i64 %offset) nounwind {
136entry:
137  %conv = trunc i64 %val to i32
138  %arrayidx = getelementptr inbounds i32* %base, i64 %offset
139  store i32 %conv, i32* %arrayidx, align 4
140  ret i32* %arrayidx
141}
142; CHECK: @test_stwux
143; CHECK: %entry
144; CHECK-NEXT: sldi
145; CHECK-NEXT: stwux
146; CHECK-NEXT: blr
147
148define i64* @test_stdu(i64* %base, i64 %val) nounwind {
149entry:
150  %arrayidx = getelementptr inbounds i64* %base, i64 16
151  store i64 %val, i64* %arrayidx, align 8
152  ret i64* %arrayidx
153}
154; CHECK: @test_stdu
155; CHECK: %entry
156; CHECK-NEXT: stdu
157; CHECK-NEXT: blr
158
159define i64* @test_stdux(i64* %base, i64 %val, i64 %offset) nounwind {
160entry:
161  %arrayidx = getelementptr inbounds i64* %base, i64 %offset
162  store i64 %val, i64* %arrayidx, align 8
163  ret i64* %arrayidx
164}
165; CHECK: @test_stdux
166; CHECK: %entry
167; CHECK-NEXT: sldi
168; CHECK-NEXT: stdux
169; CHECK-NEXT: blr
170
171