; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-arm-none-eabi < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-arm-none-eabi -stop-after=machine-outliner < %s | FileCheck %s -check-prefix=TARGET_FEATURES ; Make sure that we haven't added nouwind. ; TARGET_FEATURES: define internal void @OUTLINED_FUNCTION_0() ; TARGET_FEATURES-SAME: #[[ATTR_NUM:[0-9]+]] ; TARGET_FEATURES: attributes #[[ATTR_NUM]] = { minsize optsize } define dso_local i32 @_Z5func1i(i32 %x) #0 { ; CHECK-LABEL: _Z5func1i: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: .cfi_offset w19, -8 ; CHECK-NEXT: .cfi_offset w30, -16 ; CHECK-NEXT: orr w8, wzr, #0x1 ; CHECK-NEXT: madd w19, w0, w0, w8 ; CHECK-NEXT: mov w0, #4 ; CHECK-NEXT: bl __cxa_allocate_exception ; CHECK-NEXT: bl OUTLINED_FUNCTION_0 entry: %mul = mul nsw i32 %x, %x %add = add nuw nsw i32 %mul, 1 %exception = tail call i8* @__cxa_allocate_exception(i64 4) #1 %0 = bitcast i8* %exception to i32* store i32 %add, i32* %0, align 16 tail call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #2 unreachable } define dso_local i32 @_Z5func2c(i8 %x) #0 { ; CHECK-LABEL: _Z5func2c: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: .cfi_offset w19, -8 ; CHECK-NEXT: .cfi_offset w30, -16 ; CHECK-NEXT: and w8, w0, #0xff ; CHECK-NEXT: orr w9, wzr, #0x1 ; CHECK-NEXT: mov w0, #4 ; CHECK-NEXT: madd w19, w8, w8, w9 ; CHECK-NEXT: bl __cxa_allocate_exception ; CHECK-NEXT: bl OUTLINED_FUNCTION_0 entry: %conv = zext i8 %x to i32 %mul = mul nuw nsw i32 %conv, %conv %add = add nuw nsw i32 %mul, 1 %exception = tail call i8* @__cxa_allocate_exception(i64 4) #1 %0 = bitcast i8* %exception to i32* store i32 %add, i32* %0, align 16 tail call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #2 unreachable } ; CHECK-LABEL: OUTLINED_FUNCTION_0: ; CHECK: .cfi_startproc ; CHECK: adrp x1, _ZTIi ; CHECK-NEXT: add x1, x1, :lo12:_ZTIi ; CHECK-NEXT: mov x2, xzr ; CHECK-NEXT: str w19, [x0] ; CHECK-NEXT: b __cxa_throw ; CHECK: .cfi_endproc @_ZTIi = external dso_local constant i8* declare dso_local i8* @__cxa_allocate_exception(i64) local_unnamed_addr declare dso_local void @__cxa_throw(i8*, i8*, i8*) local_unnamed_addr attributes #0 = { minsize noreturn optsize } attributes #1 = { nounwind } attributes #2 = { noreturn }