1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -enable-machine-outliner -mattr=+m -mtriple=riscv64 < %s | FileCheck %s 3 4; Ensure that we won't outline CFIs when they are needed in unwinding. 5 6define i32 @func1(i32 %x) #0 { 7; CHECK-LABEL: func1: 8; CHECK: # %bb.0: # %entry 9; CHECK-NEXT: addi sp, sp, -16 10; CHECK-NEXT: .cfi_def_cfa_offset 16 11; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 12; CHECK-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 13; CHECK-NEXT: .cfi_offset ra, -8 14; CHECK-NEXT: .cfi_offset s0, -16 15; CHECK-NEXT: mulw a0, a0, a0 16; CHECK-NEXT: addiw s0, a0, 1 17; CHECK-NEXT: li a0, 4 18; CHECK-NEXT: call __cxa_allocate_exception@plt 19; CHECK-NEXT: sw s0, 0(a0) 20; CHECK-NEXT: lui a1, %hi(_ZTIi) 21; CHECK-NEXT: addi a1, a1, %lo(_ZTIi) 22; CHECK-NEXT: li a2, 0 23; CHECK-NEXT: call __cxa_throw@plt 24entry: 25 %mul = mul i32 %x, %x 26 %add = add i32 %mul, 1 27 %exception = tail call i8* @__cxa_allocate_exception(i64 4) 28 %0 = bitcast i8* %exception to i32* 29 store i32 %add, i32* %0 30 tail call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIi to i8*), i8* null) 31 unreachable 32} 33 34define i32 @func2(i32 %x) #0 { 35; CHECK-LABEL: func2: 36; CHECK: # %bb.0: # %entry 37; CHECK-NEXT: addi sp, sp, -16 38; CHECK-NEXT: .cfi_def_cfa_offset 16 39; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 40; CHECK-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 41; CHECK-NEXT: .cfi_offset ra, -8 42; CHECK-NEXT: .cfi_offset s0, -16 43; CHECK-NEXT: mulw a0, a0, a0 44; CHECK-NEXT: addiw s0, a0, 1 45; CHECK-NEXT: li a0, 4 46; CHECK-NEXT: call __cxa_allocate_exception@plt 47; CHECK-NEXT: sw s0, 0(a0) 48; CHECK-NEXT: lui a1, %hi(_ZTIi) 49; CHECK-NEXT: addi a1, a1, %lo(_ZTIi) 50; CHECK-NEXT: li a2, 0 51; CHECK-NEXT: call __cxa_throw@plt 52entry: 53 %mul = mul i32 %x, %x 54 %add = add i32 %mul, 1 55 %exception = tail call i8* @__cxa_allocate_exception(i64 4) 56 %0 = bitcast i8* %exception to i32* 57 store i32 %add, i32* %0 58 tail call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIi to i8*), i8* null) 59 unreachable 60} 61 62@_ZTIi = external constant i8* 63declare i8* @__cxa_allocate_exception(i64) 64declare void @__cxa_throw(i8*, i8*, i8*) 65 66attributes #0 = { minsize noreturn } 67