xref: /llvm-project/llvm/test/CodeGen/RISCV/stack-folding.ll (revision 2dccf11b92ee97091fb08b3f3b385d2b870e41b7)
1d7f2a633SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2ab2348a6SCraig Topper; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefixes=CHECK,RV64I
3ab2348a6SCraig Topper; RUN: llc < %s -mtriple=riscv64 -mattr=+zba,+zbb | \
4ab2348a6SCraig Topper; RUN:   FileCheck %s --check-prefixes=CHECK,RV64ZB
5d7f2a633SCraig Topper
6d7f2a633SCraig Topper; Make sure we emit an lw for the stack reload in 'truebb'.
7ab2348a6SCraig Topperdefine i1 @test_sext_w(i64 %x, i32 %y) nounwind {
8ab2348a6SCraig Topper; CHECK-LABEL: test_sext_w:
9d7f2a633SCraig Topper; CHECK:       # %bb.0:
10*2dccf11bSCraig Topper; CHECK-NEXT:    addi sp, sp, -128
11*2dccf11bSCraig Topper; CHECK-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
12d7f2a633SCraig Topper; CHECK-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
13d7f2a633SCraig Topper; CHECK-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
14d7f2a633SCraig Topper; CHECK-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
15d7f2a633SCraig Topper; CHECK-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
16d7f2a633SCraig Topper; CHECK-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
17d7f2a633SCraig Topper; CHECK-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
18d7f2a633SCraig Topper; CHECK-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
19d7f2a633SCraig Topper; CHECK-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
20d7f2a633SCraig Topper; CHECK-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
21d7f2a633SCraig Topper; CHECK-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
22d7f2a633SCraig Topper; CHECK-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
23d7f2a633SCraig Topper; CHECK-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
24d7f2a633SCraig Topper; CHECK-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
25d7f2a633SCraig Topper; CHECK-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
26d7f2a633SCraig Topper; CHECK-NEXT:    #APP
27d7f2a633SCraig Topper; CHECK-NEXT:    #NO_APP
28d7f2a633SCraig Topper; CHECK-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
29d7f2a633SCraig Topper; CHECK-NEXT:    beqz a0, .LBB0_2
30d7f2a633SCraig Topper; CHECK-NEXT:  # %bb.1: # %falsebb
31d7f2a633SCraig Topper; CHECK-NEXT:    li a0, 0
32d7f2a633SCraig Topper; CHECK-NEXT:    j .LBB0_3
33d7f2a633SCraig Topper; CHECK-NEXT:  .LBB0_2: # %truebb
34d7f2a633SCraig Topper; CHECK-NEXT:    lw a0, 8(sp) # 8-byte Folded Reload
35d7f2a633SCraig Topper; CHECK-NEXT:    slti a0, a0, 0
36d7f2a633SCraig Topper; CHECK-NEXT:  .LBB0_3: # %falsebb
37*2dccf11bSCraig Topper; CHECK-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
38d7f2a633SCraig Topper; CHECK-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
39d7f2a633SCraig Topper; CHECK-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
40d7f2a633SCraig Topper; CHECK-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
41d7f2a633SCraig Topper; CHECK-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
42d7f2a633SCraig Topper; CHECK-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
43d7f2a633SCraig Topper; CHECK-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
44d7f2a633SCraig Topper; CHECK-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
45d7f2a633SCraig Topper; CHECK-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
46d7f2a633SCraig Topper; CHECK-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
47d7f2a633SCraig Topper; CHECK-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
48d7f2a633SCraig Topper; CHECK-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
49d7f2a633SCraig Topper; CHECK-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
50*2dccf11bSCraig Topper; CHECK-NEXT:    addi sp, sp, 128
51d7f2a633SCraig Topper; CHECK-NEXT:    ret
52d7f2a633SCraig Topper  tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()
53d7f2a633SCraig Topper  %a = icmp eq i64 %x, 0
54d7f2a633SCraig Topper  br i1 %a, label %truebb, label %falsebb
55d7f2a633SCraig Toppertruebb:
56d7f2a633SCraig Topper  %b = icmp slt i32 %y, 0
57d7f2a633SCraig Topper  ret i1 %b
58d7f2a633SCraig Topperfalsebb:
59d7f2a633SCraig Topper  ret i1 0
60d7f2a633SCraig Topper}
61ab2348a6SCraig Topper
62ab2348a6SCraig Topper; Make sure we emit an lb for the stack reload in 'truebb' with Zbb.
63ab2348a6SCraig Topperdefine i64 @test_sext_b(i64 %x, i8 %y) nounwind {
64ab2348a6SCraig Topper; RV64I-LABEL: test_sext_b:
65ab2348a6SCraig Topper; RV64I:       # %bb.0:
66*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, -128
67*2dccf11bSCraig Topper; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
68ab2348a6SCraig Topper; RV64I-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
69ab2348a6SCraig Topper; RV64I-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
70ab2348a6SCraig Topper; RV64I-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
71ab2348a6SCraig Topper; RV64I-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
72ab2348a6SCraig Topper; RV64I-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
73ab2348a6SCraig Topper; RV64I-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
74ab2348a6SCraig Topper; RV64I-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
75ab2348a6SCraig Topper; RV64I-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
76ab2348a6SCraig Topper; RV64I-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
77ab2348a6SCraig Topper; RV64I-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
78ab2348a6SCraig Topper; RV64I-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
79ab2348a6SCraig Topper; RV64I-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
80ab2348a6SCraig Topper; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
81ab2348a6SCraig Topper; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
82ab2348a6SCraig Topper; RV64I-NEXT:    #APP
83ab2348a6SCraig Topper; RV64I-NEXT:    #NO_APP
84ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
85ab2348a6SCraig Topper; RV64I-NEXT:    beqz a0, .LBB1_2
86ab2348a6SCraig Topper; RV64I-NEXT:  # %bb.1: # %falsebb
87ab2348a6SCraig Topper; RV64I-NEXT:    li a0, 0
88ab2348a6SCraig Topper; RV64I-NEXT:    j .LBB1_3
89ab2348a6SCraig Topper; RV64I-NEXT:  .LBB1_2: # %truebb
90ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
91ab2348a6SCraig Topper; RV64I-NEXT:    slli a0, a0, 56
92ab2348a6SCraig Topper; RV64I-NEXT:    srai a0, a0, 56
93ab2348a6SCraig Topper; RV64I-NEXT:  .LBB1_3: # %falsebb
94*2dccf11bSCraig Topper; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
95ab2348a6SCraig Topper; RV64I-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
96ab2348a6SCraig Topper; RV64I-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
97ab2348a6SCraig Topper; RV64I-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
98ab2348a6SCraig Topper; RV64I-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
99ab2348a6SCraig Topper; RV64I-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
100ab2348a6SCraig Topper; RV64I-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
101ab2348a6SCraig Topper; RV64I-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
102ab2348a6SCraig Topper; RV64I-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
103ab2348a6SCraig Topper; RV64I-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
104ab2348a6SCraig Topper; RV64I-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
105ab2348a6SCraig Topper; RV64I-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
106ab2348a6SCraig Topper; RV64I-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
107*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, 128
108ab2348a6SCraig Topper; RV64I-NEXT:    ret
109ab2348a6SCraig Topper;
110ab2348a6SCraig Topper; RV64ZB-LABEL: test_sext_b:
111ab2348a6SCraig Topper; RV64ZB:       # %bb.0:
112*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, -128
113*2dccf11bSCraig Topper; RV64ZB-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
114ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
115ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
116ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
117ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
118ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
119ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
120ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
121ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
122ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
123ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
124ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
125ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
126ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
127ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
128ab2348a6SCraig Topper; RV64ZB-NEXT:    #APP
129ab2348a6SCraig Topper; RV64ZB-NEXT:    #NO_APP
130ab2348a6SCraig Topper; RV64ZB-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
131ab2348a6SCraig Topper; RV64ZB-NEXT:    beqz a0, .LBB1_2
132ab2348a6SCraig Topper; RV64ZB-NEXT:  # %bb.1: # %falsebb
133ab2348a6SCraig Topper; RV64ZB-NEXT:    li a0, 0
134ab2348a6SCraig Topper; RV64ZB-NEXT:    j .LBB1_3
135ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB1_2: # %truebb
136ab2348a6SCraig Topper; RV64ZB-NEXT:    lb a0, 8(sp) # 8-byte Folded Reload
137ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB1_3: # %falsebb
138*2dccf11bSCraig Topper; RV64ZB-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
139ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
140ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
141ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
142ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
143ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
144ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
145ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
146ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
147ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
148ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
149ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
150ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
151*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, 128
152ab2348a6SCraig Topper; RV64ZB-NEXT:    ret
153ab2348a6SCraig Topper  tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()
154ab2348a6SCraig Topper  %a = icmp eq i64 %x, 0
155ab2348a6SCraig Topper  br i1 %a, label %truebb, label %falsebb
156ab2348a6SCraig Toppertruebb:
157ab2348a6SCraig Topper  %b = sext i8 %y to i64
158ab2348a6SCraig Topper  ret i64 %b
159ab2348a6SCraig Topperfalsebb:
160ab2348a6SCraig Topper  ret i64 0
161ab2348a6SCraig Topper}
162ab2348a6SCraig Topper
163ab2348a6SCraig Topper; Make sure we emit an lh for the stack reload in 'truebb' with Zbb.
164ab2348a6SCraig Topperdefine i64 @test_sext_h(i64 %x, i16 %y) nounwind {
165ab2348a6SCraig Topper; RV64I-LABEL: test_sext_h:
166ab2348a6SCraig Topper; RV64I:       # %bb.0:
167*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, -128
168*2dccf11bSCraig Topper; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
169ab2348a6SCraig Topper; RV64I-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
170ab2348a6SCraig Topper; RV64I-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
171ab2348a6SCraig Topper; RV64I-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
172ab2348a6SCraig Topper; RV64I-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
173ab2348a6SCraig Topper; RV64I-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
174ab2348a6SCraig Topper; RV64I-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
175ab2348a6SCraig Topper; RV64I-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
176ab2348a6SCraig Topper; RV64I-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
177ab2348a6SCraig Topper; RV64I-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
178ab2348a6SCraig Topper; RV64I-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
179ab2348a6SCraig Topper; RV64I-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
180ab2348a6SCraig Topper; RV64I-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
181ab2348a6SCraig Topper; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
182ab2348a6SCraig Topper; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
183ab2348a6SCraig Topper; RV64I-NEXT:    #APP
184ab2348a6SCraig Topper; RV64I-NEXT:    #NO_APP
185ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
186ab2348a6SCraig Topper; RV64I-NEXT:    beqz a0, .LBB2_2
187ab2348a6SCraig Topper; RV64I-NEXT:  # %bb.1: # %falsebb
188ab2348a6SCraig Topper; RV64I-NEXT:    li a0, 0
189ab2348a6SCraig Topper; RV64I-NEXT:    j .LBB2_3
190ab2348a6SCraig Topper; RV64I-NEXT:  .LBB2_2: # %truebb
191ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
192ab2348a6SCraig Topper; RV64I-NEXT:    slli a0, a0, 48
193ab2348a6SCraig Topper; RV64I-NEXT:    srai a0, a0, 48
194ab2348a6SCraig Topper; RV64I-NEXT:  .LBB2_3: # %falsebb
195*2dccf11bSCraig Topper; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
196ab2348a6SCraig Topper; RV64I-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
197ab2348a6SCraig Topper; RV64I-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
198ab2348a6SCraig Topper; RV64I-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
199ab2348a6SCraig Topper; RV64I-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
200ab2348a6SCraig Topper; RV64I-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
201ab2348a6SCraig Topper; RV64I-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
202ab2348a6SCraig Topper; RV64I-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
203ab2348a6SCraig Topper; RV64I-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
204ab2348a6SCraig Topper; RV64I-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
205ab2348a6SCraig Topper; RV64I-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
206ab2348a6SCraig Topper; RV64I-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
207ab2348a6SCraig Topper; RV64I-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
208*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, 128
209ab2348a6SCraig Topper; RV64I-NEXT:    ret
210ab2348a6SCraig Topper;
211ab2348a6SCraig Topper; RV64ZB-LABEL: test_sext_h:
212ab2348a6SCraig Topper; RV64ZB:       # %bb.0:
213*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, -128
214*2dccf11bSCraig Topper; RV64ZB-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
215ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
216ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
217ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
218ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
219ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
220ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
221ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
222ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
223ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
224ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
225ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
226ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
227ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
228ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
229ab2348a6SCraig Topper; RV64ZB-NEXT:    #APP
230ab2348a6SCraig Topper; RV64ZB-NEXT:    #NO_APP
231ab2348a6SCraig Topper; RV64ZB-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
232ab2348a6SCraig Topper; RV64ZB-NEXT:    beqz a0, .LBB2_2
233ab2348a6SCraig Topper; RV64ZB-NEXT:  # %bb.1: # %falsebb
234ab2348a6SCraig Topper; RV64ZB-NEXT:    li a0, 0
235ab2348a6SCraig Topper; RV64ZB-NEXT:    j .LBB2_3
236ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB2_2: # %truebb
237ab2348a6SCraig Topper; RV64ZB-NEXT:    lh a0, 8(sp) # 8-byte Folded Reload
238ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB2_3: # %falsebb
239*2dccf11bSCraig Topper; RV64ZB-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
240ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
241ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
242ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
243ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
244ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
245ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
246ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
247ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
248ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
249ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
250ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
251ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
252*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, 128
253ab2348a6SCraig Topper; RV64ZB-NEXT:    ret
254ab2348a6SCraig Topper  tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()
255ab2348a6SCraig Topper  %a = icmp eq i64 %x, 0
256ab2348a6SCraig Topper  br i1 %a, label %truebb, label %falsebb
257ab2348a6SCraig Toppertruebb:
258ab2348a6SCraig Topper  %b = sext i16 %y to i64
259ab2348a6SCraig Topper  ret i64 %b
260ab2348a6SCraig Topperfalsebb:
261ab2348a6SCraig Topper  ret i64 0
262ab2348a6SCraig Topper}
263ab2348a6SCraig Topper
264ab2348a6SCraig Topper; Make sure we emit an lbu for the stack reload in 'truebb' with Zbb.
265ab2348a6SCraig Topperdefine i64 @test_zext_b(i64 %x, i8 %y) nounwind {
266ab2348a6SCraig Topper; CHECK-LABEL: test_zext_b:
267ab2348a6SCraig Topper; CHECK:       # %bb.0:
268*2dccf11bSCraig Topper; CHECK-NEXT:    addi sp, sp, -128
269*2dccf11bSCraig Topper; CHECK-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
270ab2348a6SCraig Topper; CHECK-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
271ab2348a6SCraig Topper; CHECK-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
272ab2348a6SCraig Topper; CHECK-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
273ab2348a6SCraig Topper; CHECK-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
274ab2348a6SCraig Topper; CHECK-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
275ab2348a6SCraig Topper; CHECK-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
276ab2348a6SCraig Topper; CHECK-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
277ab2348a6SCraig Topper; CHECK-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
278ab2348a6SCraig Topper; CHECK-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
279ab2348a6SCraig Topper; CHECK-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
280ab2348a6SCraig Topper; CHECK-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
281ab2348a6SCraig Topper; CHECK-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
282ab2348a6SCraig Topper; CHECK-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
283ab2348a6SCraig Topper; CHECK-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
284ab2348a6SCraig Topper; CHECK-NEXT:    #APP
285ab2348a6SCraig Topper; CHECK-NEXT:    #NO_APP
286ab2348a6SCraig Topper; CHECK-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
287ab2348a6SCraig Topper; CHECK-NEXT:    beqz a0, .LBB3_2
288ab2348a6SCraig Topper; CHECK-NEXT:  # %bb.1: # %falsebb
289ab2348a6SCraig Topper; CHECK-NEXT:    li a0, 0
290ab2348a6SCraig Topper; CHECK-NEXT:    j .LBB3_3
291ab2348a6SCraig Topper; CHECK-NEXT:  .LBB3_2: # %truebb
292ab2348a6SCraig Topper; CHECK-NEXT:    lbu a0, 8(sp) # 8-byte Folded Reload
293ab2348a6SCraig Topper; CHECK-NEXT:  .LBB3_3: # %falsebb
294*2dccf11bSCraig Topper; CHECK-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
295ab2348a6SCraig Topper; CHECK-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
296ab2348a6SCraig Topper; CHECK-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
297ab2348a6SCraig Topper; CHECK-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
298ab2348a6SCraig Topper; CHECK-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
299ab2348a6SCraig Topper; CHECK-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
300ab2348a6SCraig Topper; CHECK-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
301ab2348a6SCraig Topper; CHECK-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
302ab2348a6SCraig Topper; CHECK-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
303ab2348a6SCraig Topper; CHECK-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
304ab2348a6SCraig Topper; CHECK-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
305ab2348a6SCraig Topper; CHECK-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
306ab2348a6SCraig Topper; CHECK-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
307*2dccf11bSCraig Topper; CHECK-NEXT:    addi sp, sp, 128
308ab2348a6SCraig Topper; CHECK-NEXT:    ret
309ab2348a6SCraig Topper  tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()
310ab2348a6SCraig Topper  %a = icmp eq i64 %x, 0
311ab2348a6SCraig Topper  br i1 %a, label %truebb, label %falsebb
312ab2348a6SCraig Toppertruebb:
313ab2348a6SCraig Topper  %b = zext i8 %y to i64
314ab2348a6SCraig Topper  ret i64 %b
315ab2348a6SCraig Topperfalsebb:
316ab2348a6SCraig Topper  ret i64 0
317ab2348a6SCraig Topper}
318ab2348a6SCraig Topper
319ab2348a6SCraig Topper; Make sure we emit an lhu for the stack reload in 'truebb' with Zbb.
320ab2348a6SCraig Topperdefine i64 @test_zext_h(i64 %x, i16 %y) nounwind {
321ab2348a6SCraig Topper; RV64I-LABEL: test_zext_h:
322ab2348a6SCraig Topper; RV64I:       # %bb.0:
323*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, -128
324*2dccf11bSCraig Topper; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
325ab2348a6SCraig Topper; RV64I-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
326ab2348a6SCraig Topper; RV64I-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
327ab2348a6SCraig Topper; RV64I-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
328ab2348a6SCraig Topper; RV64I-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
329ab2348a6SCraig Topper; RV64I-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
330ab2348a6SCraig Topper; RV64I-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
331ab2348a6SCraig Topper; RV64I-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
332ab2348a6SCraig Topper; RV64I-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
333ab2348a6SCraig Topper; RV64I-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
334ab2348a6SCraig Topper; RV64I-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
335ab2348a6SCraig Topper; RV64I-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
336ab2348a6SCraig Topper; RV64I-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
337ab2348a6SCraig Topper; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
338ab2348a6SCraig Topper; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
339ab2348a6SCraig Topper; RV64I-NEXT:    #APP
340ab2348a6SCraig Topper; RV64I-NEXT:    #NO_APP
341ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
342ab2348a6SCraig Topper; RV64I-NEXT:    beqz a0, .LBB4_2
343ab2348a6SCraig Topper; RV64I-NEXT:  # %bb.1: # %falsebb
344ab2348a6SCraig Topper; RV64I-NEXT:    li a0, 0
345ab2348a6SCraig Topper; RV64I-NEXT:    j .LBB4_3
346ab2348a6SCraig Topper; RV64I-NEXT:  .LBB4_2: # %truebb
347ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
348ab2348a6SCraig Topper; RV64I-NEXT:    slli a0, a0, 48
349ab2348a6SCraig Topper; RV64I-NEXT:    srli a0, a0, 48
350ab2348a6SCraig Topper; RV64I-NEXT:  .LBB4_3: # %falsebb
351*2dccf11bSCraig Topper; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
352ab2348a6SCraig Topper; RV64I-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
353ab2348a6SCraig Topper; RV64I-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
354ab2348a6SCraig Topper; RV64I-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
355ab2348a6SCraig Topper; RV64I-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
356ab2348a6SCraig Topper; RV64I-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
357ab2348a6SCraig Topper; RV64I-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
358ab2348a6SCraig Topper; RV64I-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
359ab2348a6SCraig Topper; RV64I-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
360ab2348a6SCraig Topper; RV64I-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
361ab2348a6SCraig Topper; RV64I-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
362ab2348a6SCraig Topper; RV64I-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
363ab2348a6SCraig Topper; RV64I-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
364*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, 128
365ab2348a6SCraig Topper; RV64I-NEXT:    ret
366ab2348a6SCraig Topper;
367ab2348a6SCraig Topper; RV64ZB-LABEL: test_zext_h:
368ab2348a6SCraig Topper; RV64ZB:       # %bb.0:
369*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, -128
370*2dccf11bSCraig Topper; RV64ZB-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
371ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
372ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
373ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
374ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
375ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
376ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
377ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
378ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
379ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
380ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
381ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
382ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
383ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
384ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
385ab2348a6SCraig Topper; RV64ZB-NEXT:    #APP
386ab2348a6SCraig Topper; RV64ZB-NEXT:    #NO_APP
387ab2348a6SCraig Topper; RV64ZB-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
388ab2348a6SCraig Topper; RV64ZB-NEXT:    beqz a0, .LBB4_2
389ab2348a6SCraig Topper; RV64ZB-NEXT:  # %bb.1: # %falsebb
390ab2348a6SCraig Topper; RV64ZB-NEXT:    li a0, 0
391ab2348a6SCraig Topper; RV64ZB-NEXT:    j .LBB4_3
392ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB4_2: # %truebb
393ab2348a6SCraig Topper; RV64ZB-NEXT:    lhu a0, 8(sp) # 8-byte Folded Reload
394ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB4_3: # %falsebb
395*2dccf11bSCraig Topper; RV64ZB-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
396ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
397ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
398ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
399ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
400ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
401ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
402ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
403ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
404ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
405ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
406ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
407ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
408*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, 128
409ab2348a6SCraig Topper; RV64ZB-NEXT:    ret
410ab2348a6SCraig Topper  tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()
411ab2348a6SCraig Topper  %a = icmp eq i64 %x, 0
412ab2348a6SCraig Topper  br i1 %a, label %truebb, label %falsebb
413ab2348a6SCraig Toppertruebb:
414ab2348a6SCraig Topper  %b = zext i16 %y to i64
415ab2348a6SCraig Topper  ret i64 %b
416ab2348a6SCraig Topperfalsebb:
417ab2348a6SCraig Topper  ret i64 0
418ab2348a6SCraig Topper}
419ab2348a6SCraig Topper
420ab2348a6SCraig Topper; Make sure we emit an lwu for the stack reload in 'truebb' with Zbb.
421ab2348a6SCraig Topperdefine i64 @test_zext_w(i64 %x, i32 %y) nounwind {
422ab2348a6SCraig Topper; RV64I-LABEL: test_zext_w:
423ab2348a6SCraig Topper; RV64I:       # %bb.0:
424*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, -128
425*2dccf11bSCraig Topper; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
426ab2348a6SCraig Topper; RV64I-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
427ab2348a6SCraig Topper; RV64I-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
428ab2348a6SCraig Topper; RV64I-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
429ab2348a6SCraig Topper; RV64I-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
430ab2348a6SCraig Topper; RV64I-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
431ab2348a6SCraig Topper; RV64I-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
432ab2348a6SCraig Topper; RV64I-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
433ab2348a6SCraig Topper; RV64I-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
434ab2348a6SCraig Topper; RV64I-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
435ab2348a6SCraig Topper; RV64I-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
436ab2348a6SCraig Topper; RV64I-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
437ab2348a6SCraig Topper; RV64I-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
438ab2348a6SCraig Topper; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
439ab2348a6SCraig Topper; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
440ab2348a6SCraig Topper; RV64I-NEXT:    #APP
441ab2348a6SCraig Topper; RV64I-NEXT:    #NO_APP
442ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
443ab2348a6SCraig Topper; RV64I-NEXT:    beqz a0, .LBB5_2
444ab2348a6SCraig Topper; RV64I-NEXT:  # %bb.1: # %falsebb
445ab2348a6SCraig Topper; RV64I-NEXT:    li a0, 0
446ab2348a6SCraig Topper; RV64I-NEXT:    j .LBB5_3
447ab2348a6SCraig Topper; RV64I-NEXT:  .LBB5_2: # %truebb
448ab2348a6SCraig Topper; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
449ab2348a6SCraig Topper; RV64I-NEXT:    slli a0, a0, 32
450ab2348a6SCraig Topper; RV64I-NEXT:    srli a0, a0, 32
451ab2348a6SCraig Topper; RV64I-NEXT:  .LBB5_3: # %falsebb
452*2dccf11bSCraig Topper; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
453ab2348a6SCraig Topper; RV64I-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
454ab2348a6SCraig Topper; RV64I-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
455ab2348a6SCraig Topper; RV64I-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
456ab2348a6SCraig Topper; RV64I-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
457ab2348a6SCraig Topper; RV64I-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
458ab2348a6SCraig Topper; RV64I-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
459ab2348a6SCraig Topper; RV64I-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
460ab2348a6SCraig Topper; RV64I-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
461ab2348a6SCraig Topper; RV64I-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
462ab2348a6SCraig Topper; RV64I-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
463ab2348a6SCraig Topper; RV64I-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
464ab2348a6SCraig Topper; RV64I-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
465*2dccf11bSCraig Topper; RV64I-NEXT:    addi sp, sp, 128
466ab2348a6SCraig Topper; RV64I-NEXT:    ret
467ab2348a6SCraig Topper;
468ab2348a6SCraig Topper; RV64ZB-LABEL: test_zext_w:
469ab2348a6SCraig Topper; RV64ZB:       # %bb.0:
470*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, -128
471*2dccf11bSCraig Topper; RV64ZB-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
472ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
473ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
474ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
475ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
476ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
477ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
478ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
479ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
480ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
481ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
482ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
483ab2348a6SCraig Topper; RV64ZB-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
484ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
485ab2348a6SCraig Topper; RV64ZB-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
486ab2348a6SCraig Topper; RV64ZB-NEXT:    #APP
487ab2348a6SCraig Topper; RV64ZB-NEXT:    #NO_APP
488ab2348a6SCraig Topper; RV64ZB-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
489ab2348a6SCraig Topper; RV64ZB-NEXT:    beqz a0, .LBB5_2
490ab2348a6SCraig Topper; RV64ZB-NEXT:  # %bb.1: # %falsebb
491ab2348a6SCraig Topper; RV64ZB-NEXT:    li a0, 0
492ab2348a6SCraig Topper; RV64ZB-NEXT:    j .LBB5_3
493ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB5_2: # %truebb
494ab2348a6SCraig Topper; RV64ZB-NEXT:    lwu a0, 8(sp) # 8-byte Folded Reload
495ab2348a6SCraig Topper; RV64ZB-NEXT:  .LBB5_3: # %falsebb
496*2dccf11bSCraig Topper; RV64ZB-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
497ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
498ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
499ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
500ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
501ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
502ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
503ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
504ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
505ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
506ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
507ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
508ab2348a6SCraig Topper; RV64ZB-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
509*2dccf11bSCraig Topper; RV64ZB-NEXT:    addi sp, sp, 128
510ab2348a6SCraig Topper; RV64ZB-NEXT:    ret
511ab2348a6SCraig Topper  tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()
512ab2348a6SCraig Topper  %a = icmp eq i64 %x, 0
513ab2348a6SCraig Topper  br i1 %a, label %truebb, label %falsebb
514ab2348a6SCraig Toppertruebb:
515ab2348a6SCraig Topper  %b = zext i32 %y to i64
516ab2348a6SCraig Topper  ret i64 %b
517ab2348a6SCraig Topperfalsebb:
518ab2348a6SCraig Topper  ret i64 0
519ab2348a6SCraig Topper}
520