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