xref: /llvm-project/llvm/test/CodeGen/RISCV/lpad.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
19fb196b4SYeting Kuo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
29fb196b4SYeting Kuo; RUN: llc -mtriple riscv32 -mattr=+experimental-zicfilp < %s | FileCheck %s --check-prefixes=CHECK,RV32
39fb196b4SYeting Kuo; RUN: llc -mtriple riscv64 -mattr=+experimental-zicfilp < %s | FileCheck %s --check-prefixes=CHECK,RV64
4e80d8e1bSYeting Kuo; RUN: llc -mtriple riscv32 -mattr=+experimental-zicfilp \
5e80d8e1bSYeting Kuo; RUN: -riscv-landing-pad-label=1 < %s | FileCheck %s --check-prefixes=FIXED-ONE,FIXED-ONE-RV32
6e80d8e1bSYeting Kuo; RUN: llc -mtriple riscv64 -mattr=+experimental-zicfilp \
7e80d8e1bSYeting Kuo; RUN: -riscv-landing-pad-label=1 < %s | FileCheck %s --check-prefixes=FIXED-ONE,FIXED-ONE-RV64
89fb196b4SYeting Kuo
99fb196b4SYeting Kuo; Check indirectbr.
109fb196b4SYeting Kuo@__const.indirctbr.addr = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@indirctbr, %labelA), ptr blockaddress(@indirctbr, %labelB)], align 8
119fb196b4SYeting Kuodefine void @indirctbr(i32 %i, ptr %p) {
129fb196b4SYeting Kuo; RV32-LABEL: indirctbr:
139fb196b4SYeting Kuo; RV32:       # %bb.0: # %entry
149fb196b4SYeting Kuo; RV32-NEXT:    lpad 0
159fb196b4SYeting Kuo; RV32-NEXT:    slli a0, a0, 2
169fb196b4SYeting Kuo; RV32-NEXT:    lui a2, %hi(.L__const.indirctbr.addr)
179fb196b4SYeting Kuo; RV32-NEXT:    addi a2, a2, %lo(.L__const.indirctbr.addr)
189fb196b4SYeting Kuo; RV32-NEXT:    add a0, a2, a0
199fb196b4SYeting Kuo; RV32-NEXT:    lw a0, 0(a0)
209fb196b4SYeting Kuo; RV32-NEXT:    jr a0
219fb196b4SYeting Kuo; RV32-NEXT:    .p2align 2
22e80d8e1bSYeting Kuo; RV32-NEXT:  .Ltmp3: # Block address taken
239fb196b4SYeting Kuo; RV32-NEXT:  .LBB0_1: # %labelA
249fb196b4SYeting Kuo; RV32-NEXT:    lpad 0
259fb196b4SYeting Kuo; RV32-NEXT:    li a0, 1
269fb196b4SYeting Kuo; RV32-NEXT:    sw a0, 0(a1)
279fb196b4SYeting Kuo; RV32-NEXT:    .p2align 2
28e80d8e1bSYeting Kuo; RV32-NEXT:  .Ltmp4: # Block address taken
299fb196b4SYeting Kuo; RV32-NEXT:  .LBB0_2: # %labelB
309fb196b4SYeting Kuo; RV32-NEXT:    lpad 0
319fb196b4SYeting Kuo; RV32-NEXT:    li a0, 2
329fb196b4SYeting Kuo; RV32-NEXT:    sw a0, 0(a1)
339fb196b4SYeting Kuo; RV32-NEXT:    ret
349fb196b4SYeting Kuo;
359fb196b4SYeting Kuo; RV64-LABEL: indirctbr:
369fb196b4SYeting Kuo; RV64:       # %bb.0: # %entry
379fb196b4SYeting Kuo; RV64-NEXT:    lpad 0
389fb196b4SYeting Kuo; RV64-NEXT:    sext.w a0, a0
399fb196b4SYeting Kuo; RV64-NEXT:    slli a0, a0, 3
409fb196b4SYeting Kuo; RV64-NEXT:    lui a2, %hi(.L__const.indirctbr.addr)
419fb196b4SYeting Kuo; RV64-NEXT:    addi a2, a2, %lo(.L__const.indirctbr.addr)
429fb196b4SYeting Kuo; RV64-NEXT:    add a0, a2, a0
439fb196b4SYeting Kuo; RV64-NEXT:    ld a0, 0(a0)
449fb196b4SYeting Kuo; RV64-NEXT:    jr a0
459fb196b4SYeting Kuo; RV64-NEXT:    .p2align 2
46e80d8e1bSYeting Kuo; RV64-NEXT:  .Ltmp3: # Block address taken
479fb196b4SYeting Kuo; RV64-NEXT:  .LBB0_1: # %labelA
489fb196b4SYeting Kuo; RV64-NEXT:    lpad 0
499fb196b4SYeting Kuo; RV64-NEXT:    li a0, 1
509fb196b4SYeting Kuo; RV64-NEXT:    sw a0, 0(a1)
519fb196b4SYeting Kuo; RV64-NEXT:    .p2align 2
52e80d8e1bSYeting Kuo; RV64-NEXT:  .Ltmp4: # Block address taken
539fb196b4SYeting Kuo; RV64-NEXT:  .LBB0_2: # %labelB
549fb196b4SYeting Kuo; RV64-NEXT:    lpad 0
559fb196b4SYeting Kuo; RV64-NEXT:    li a0, 2
569fb196b4SYeting Kuo; RV64-NEXT:    sw a0, 0(a1)
579fb196b4SYeting Kuo; RV64-NEXT:    ret
58e80d8e1bSYeting Kuo;
59e80d8e1bSYeting Kuo; FIXED-ONE-RV32-LABEL: indirctbr:
60e80d8e1bSYeting Kuo; FIXED-ONE-RV32:       # %bb.0: # %entry
61e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lpad 1
62e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    slli a0, a0, 2
63e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lui a2, %hi(.L__const.indirctbr.addr)
64e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    addi a2, a2, %lo(.L__const.indirctbr.addr)
65e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    add a0, a2, a0
66e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lw a0, 0(a0)
67e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lui t2, 1
68e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    jr a0
69e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    .p2align 2
70e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .Ltmp3: # Block address taken
71e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .LBB0_1: # %labelA
72e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lpad 1
73e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    li a0, 1
74e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    sw a0, 0(a1)
75e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    .p2align 2
76e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .Ltmp4: # Block address taken
77e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .LBB0_2: # %labelB
78e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lpad 1
79e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    li a0, 2
80e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    sw a0, 0(a1)
81e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    ret
82e80d8e1bSYeting Kuo;
83e80d8e1bSYeting Kuo; FIXED-ONE-RV64-LABEL: indirctbr:
84e80d8e1bSYeting Kuo; FIXED-ONE-RV64:       # %bb.0: # %entry
85e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lpad 1
86e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    sext.w a0, a0
87e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    slli a0, a0, 3
88e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lui a2, %hi(.L__const.indirctbr.addr)
89e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    addi a2, a2, %lo(.L__const.indirctbr.addr)
90e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    add a0, a2, a0
91e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    ld a0, 0(a0)
92e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lui t2, 1
93e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    jr a0
94e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    .p2align 2
95e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .Ltmp3: # Block address taken
96e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .LBB0_1: # %labelA
97e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lpad 1
98e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    li a0, 1
99e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    sw a0, 0(a1)
100e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    .p2align 2
101e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .Ltmp4: # Block address taken
102e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .LBB0_2: # %labelB
103e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lpad 1
104e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    li a0, 2
105e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    sw a0, 0(a1)
106e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    ret
1079fb196b4SYeting Kuoentry:
1089fb196b4SYeting Kuo  %arrayidx = getelementptr inbounds [2 x ptr], ptr @__const.indirctbr.addr, i64 0, i32 %i
1099fb196b4SYeting Kuo  %0 = load ptr, ptr %arrayidx
1109fb196b4SYeting Kuo  indirectbr ptr %0, [label %labelA, label %labelB]
1119fb196b4SYeting Kuo
1129fb196b4SYeting KuolabelA:                                           ; preds = %entry
1139fb196b4SYeting Kuo  store volatile i32 1, ptr %p
1149fb196b4SYeting Kuo  br label %labelB
1159fb196b4SYeting Kuo
1169fb196b4SYeting KuolabelB:                                           ; preds = %labelA, %entry
1179fb196b4SYeting Kuo  store volatile i32 2, ptr %p
1189fb196b4SYeting Kuo  ret void
1199fb196b4SYeting Kuo}
1209fb196b4SYeting Kuo
121e80d8e1bSYeting Kuo; Check indirect call.
122e80d8e1bSYeting Kuodefine void @call(ptr %0) {
123e80d8e1bSYeting Kuo; CHECK-LABEL: call:
124e80d8e1bSYeting Kuo; CHECK:       # %bb.0:
125e80d8e1bSYeting Kuo; CHECK-NEXT:    lpad 0
126e80d8e1bSYeting Kuo; CHECK-NEXT:    jr a0
127e80d8e1bSYeting Kuo;
128e80d8e1bSYeting Kuo; FIXED-ONE-LABEL: call:
129e80d8e1bSYeting Kuo; FIXED-ONE:       # %bb.0:
130e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    lpad 1
131e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    lui t2, 1
132e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    jr a0
133e80d8e1bSYeting Kuo  tail call void %0()
134e80d8e1bSYeting Kuo  ret void
135e80d8e1bSYeting Kuo}
136e80d8e1bSYeting Kuo
137e80d8e1bSYeting Kuo; Check invoke.
138e80d8e1bSYeting Kuodeclare dso_local i32 @__gxx_personality_v0(...)
139e80d8e1bSYeting Kuodefine void @invoke(ptr %f) personality ptr @__gxx_personality_v0 {
140e80d8e1bSYeting Kuo; RV32-LABEL: invoke:
141e80d8e1bSYeting Kuo; RV32:       # %bb.0: # %entry
142e80d8e1bSYeting Kuo; RV32-NEXT:    lpad 0
143e80d8e1bSYeting Kuo; RV32-NEXT:    addi sp, sp, -16
144e80d8e1bSYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
145e80d8e1bSYeting Kuo; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
146e80d8e1bSYeting Kuo; RV32-NEXT:    .cfi_offset ra, -4
147*97982a8cSdlav-sc; RV32-NEXT:    .cfi_remember_state
148e80d8e1bSYeting Kuo; RV32-NEXT:  .Ltmp0:
149e80d8e1bSYeting Kuo; RV32-NEXT:    jalr a0
150e80d8e1bSYeting Kuo; RV32-NEXT:  .Ltmp1:
151e80d8e1bSYeting Kuo; RV32-NEXT:  .LBB2_1: # %try.cont
152e80d8e1bSYeting Kuo; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
153*97982a8cSdlav-sc; RV32-NEXT:    .cfi_restore ra
154e80d8e1bSYeting Kuo; RV32-NEXT:    addi sp, sp, 16
155*97982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
156e80d8e1bSYeting Kuo; RV32-NEXT:    ret
157e80d8e1bSYeting Kuo; RV32-NEXT:  .LBB2_2: # %lpad
158*97982a8cSdlav-sc; RV32-NEXT:    .cfi_restore_state
159e80d8e1bSYeting Kuo; RV32-NEXT:  .Ltmp2:
160e80d8e1bSYeting Kuo; RV32-NEXT:    j .LBB2_1
161e80d8e1bSYeting Kuo;
162e80d8e1bSYeting Kuo; RV64-LABEL: invoke:
163e80d8e1bSYeting Kuo; RV64:       # %bb.0: # %entry
164e80d8e1bSYeting Kuo; RV64-NEXT:    lpad 0
165e80d8e1bSYeting Kuo; RV64-NEXT:    addi sp, sp, -16
166e80d8e1bSYeting Kuo; RV64-NEXT:    .cfi_def_cfa_offset 16
167e80d8e1bSYeting Kuo; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
168e80d8e1bSYeting Kuo; RV64-NEXT:    .cfi_offset ra, -8
169*97982a8cSdlav-sc; RV64-NEXT:    .cfi_remember_state
170e80d8e1bSYeting Kuo; RV64-NEXT:  .Ltmp0:
171e80d8e1bSYeting Kuo; RV64-NEXT:    jalr a0
172e80d8e1bSYeting Kuo; RV64-NEXT:  .Ltmp1:
173e80d8e1bSYeting Kuo; RV64-NEXT:  .LBB2_1: # %try.cont
174e80d8e1bSYeting Kuo; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
175*97982a8cSdlav-sc; RV64-NEXT:    .cfi_restore ra
176e80d8e1bSYeting Kuo; RV64-NEXT:    addi sp, sp, 16
177*97982a8cSdlav-sc; RV64-NEXT:    .cfi_def_cfa_offset 0
178e80d8e1bSYeting Kuo; RV64-NEXT:    ret
179e80d8e1bSYeting Kuo; RV64-NEXT:  .LBB2_2: # %lpad
180*97982a8cSdlav-sc; RV64-NEXT:    .cfi_restore_state
181e80d8e1bSYeting Kuo; RV64-NEXT:  .Ltmp2:
182e80d8e1bSYeting Kuo; RV64-NEXT:    j .LBB2_1
183e80d8e1bSYeting Kuo;
184e80d8e1bSYeting Kuo; FIXED-ONE-RV32-LABEL: invoke:
185e80d8e1bSYeting Kuo; FIXED-ONE-RV32:       # %bb.0: # %entry
186e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lpad 1
187e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    addi sp, sp, -16
188e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    .cfi_def_cfa_offset 16
189e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
190e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    .cfi_offset ra, -4
191*97982a8cSdlav-sc; FIXED-ONE-RV32-NEXT:    .cfi_remember_state
192e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .Ltmp0:
193e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lui t2, 1
194e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    jalr a0
195e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .Ltmp1:
196e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .LBB2_1: # %try.cont
197e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
198*97982a8cSdlav-sc; FIXED-ONE-RV32-NEXT:    .cfi_restore ra
199e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    addi sp, sp, 16
200*97982a8cSdlav-sc; FIXED-ONE-RV32-NEXT:    .cfi_def_cfa_offset 0
201e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    ret
202e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .LBB2_2: # %lpad
203*97982a8cSdlav-sc; FIXED-ONE-RV32-NEXT:    .cfi_restore_state
204e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:  .Ltmp2:
205e80d8e1bSYeting Kuo; FIXED-ONE-RV32-NEXT:    j .LBB2_1
206e80d8e1bSYeting Kuo;
207e80d8e1bSYeting Kuo; FIXED-ONE-RV64-LABEL: invoke:
208e80d8e1bSYeting Kuo; FIXED-ONE-RV64:       # %bb.0: # %entry
209e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lpad 1
210e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    addi sp, sp, -16
211e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    .cfi_def_cfa_offset 16
212e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
213e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    .cfi_offset ra, -8
214*97982a8cSdlav-sc; FIXED-ONE-RV64-NEXT:    .cfi_remember_state
215e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .Ltmp0:
216e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    lui t2, 1
217e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    jalr a0
218e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .Ltmp1:
219e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .LBB2_1: # %try.cont
220e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
221*97982a8cSdlav-sc; FIXED-ONE-RV64-NEXT:    .cfi_restore ra
222e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    addi sp, sp, 16
223*97982a8cSdlav-sc; FIXED-ONE-RV64-NEXT:    .cfi_def_cfa_offset 0
224e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    ret
225e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .LBB2_2: # %lpad
226*97982a8cSdlav-sc; FIXED-ONE-RV64-NEXT:    .cfi_restore_state
227e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:  .Ltmp2:
228e80d8e1bSYeting Kuo; FIXED-ONE-RV64-NEXT:    j .LBB2_1
229e80d8e1bSYeting Kuoentry:
230e80d8e1bSYeting Kuo  invoke void %f() to label %try.cont unwind label %lpad
231e80d8e1bSYeting Kuo
232e80d8e1bSYeting Kuolpad:
233e80d8e1bSYeting Kuo  %0 = landingpad { ptr, i32 } cleanup
234e80d8e1bSYeting Kuo  br label %try.cont
235e80d8e1bSYeting Kuo
236e80d8e1bSYeting Kuotry.cont:
237e80d8e1bSYeting Kuo  ret void
238e80d8e1bSYeting Kuo}
239e80d8e1bSYeting Kuo
2409fb196b4SYeting Kuo; Check external linkage function.
2419fb196b4SYeting Kuodefine void @external() {
2429fb196b4SYeting Kuo; CHECK-LABEL: external:
2439fb196b4SYeting Kuo; CHECK:       # %bb.0:
2449fb196b4SYeting Kuo; CHECK-NEXT:    lpad 0
2459fb196b4SYeting Kuo; CHECK-NEXT:    ret
246e80d8e1bSYeting Kuo;
247e80d8e1bSYeting Kuo; FIXED-ONE-LABEL: external:
248e80d8e1bSYeting Kuo; FIXED-ONE:       # %bb.0:
249e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    lpad 1
250e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    ret
2519fb196b4SYeting Kuo  ret void
2529fb196b4SYeting Kuo}
2539fb196b4SYeting Kuo
2549fb196b4SYeting Kuo; Check internal linkage function.
2559fb196b4SYeting Kuodefine internal void @internal() {
2569fb196b4SYeting Kuo; CHECK-LABEL: internal:
2579fb196b4SYeting Kuo; CHECK:       # %bb.0:
2589fb196b4SYeting Kuo; CHECK-NEXT:    ret
259e80d8e1bSYeting Kuo;
260e80d8e1bSYeting Kuo; FIXED-ONE-LABEL: internal:
261e80d8e1bSYeting Kuo; FIXED-ONE:       # %bb.0:
262e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    ret
2639fb196b4SYeting Kuo  ret void
2649fb196b4SYeting Kuo}
2659fb196b4SYeting Kuo
2669fb196b4SYeting Kuo; Check internal linkage function with taken address.
2679fb196b4SYeting Kuo@foo = constant ptr @internal2
2689fb196b4SYeting Kuodefine internal void @internal2() {
2699fb196b4SYeting Kuo; CHECK-LABEL: internal2:
2709fb196b4SYeting Kuo; CHECK:       # %bb.0:
2719fb196b4SYeting Kuo; CHECK-NEXT:    lpad 0
2729fb196b4SYeting Kuo; CHECK-NEXT:    ret
273e80d8e1bSYeting Kuo;
274e80d8e1bSYeting Kuo; FIXED-ONE-LABEL: internal2:
275e80d8e1bSYeting Kuo; FIXED-ONE:       # %bb.0:
276e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    lpad 1
277e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    ret
2789fb196b4SYeting Kuo  ret void
2799fb196b4SYeting Kuo}
2809fb196b4SYeting Kuo
2819fb196b4SYeting Kuo; Check interrupt function does not need landing pad.
2829fb196b4SYeting Kuodefine void @interrupt() "interrupt"="user" {
2839fb196b4SYeting Kuo; CHECK-LABEL: interrupt:
2849fb196b4SYeting Kuo; CHECK:       # %bb.0:
2859fb196b4SYeting Kuo; CHECK-NEXT:    mret
286e80d8e1bSYeting Kuo;
287e80d8e1bSYeting Kuo; FIXED-ONE-LABEL: interrupt:
288e80d8e1bSYeting Kuo; FIXED-ONE:       # %bb.0:
289e80d8e1bSYeting Kuo; FIXED-ONE-NEXT:    mret
2909fb196b4SYeting Kuo  ret void
2919fb196b4SYeting Kuo}
292