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