191 lines · plain
1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \2; RUN: -mattr=-altivec -simplifycfg-require-and-preserve-domtree=1 < %s | \3; RUN: FileCheck --check-prefixes=ASM,ASMNFS,ASM32 %s4 5; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \6; RUN: -mattr=-altivec -simplifycfg-require-and-preserve-domtree=1 < %s | \7; RUN: FileCheck --check-prefixes=ASM,ASMNFS,ASM64 %s8 9; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \10; RUN: -mattr=-altivec -simplifycfg-require-and-preserve-domtree=1 \11; RUN: -function-sections < %s | \12; RUN: FileCheck --check-prefixes=ASM,ASMFS,ASM32 %s13 14; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \15; RUN: -mattr=-altivec -simplifycfg-require-and-preserve-domtree=1 \16; RUN: -function-sections < %s | \17; RUN: FileCheck --check-prefixes=ASM,ASMFS,ASM64 %s18 19@_ZTIi = external constant ptr20 21define void @_Z9throwFuncv() {22entry:23 %exception = call ptr @__cxa_allocate_exception(i32 4) #224 store i32 1, ptr %exception, align 1625 call void @__cxa_throw(ptr %exception, ptr @_ZTIi, ptr null) #326 unreachable27}28 29; ASMNFS: ._Z9throwFuncv:30; ASMFS: .csect ._Z9throwFuncv[PR],531; ASM: bl .__cxa_allocate_exception[PR]32; ASM: nop33; ASM32: lwz 4, L..C0(2)34; ASM64: ld 4, L..C0(2)35; ASM: bl .__cxa_throw[PR]36; ASM: nop37 38define i32 @_Z9catchFuncv() personality ptr @__xlcxx_personality_v1 {39entry:40 %retval = alloca i32, align 441 %exn.slot = alloca ptr, align 442 %ehselector.slot = alloca i32, align 443 %0 = alloca i32, align 444 invoke void @_Z9throwFuncv()45 to label %invoke.cont unwind label %lpad46 47invoke.cont: ; preds = %entry48 br label %try.cont49 50lpad: ; preds = %entry51 %1 = landingpad { ptr, i32 }52 catch ptr @_ZTIi53 %2 = extractvalue { ptr, i32 } %1, 054 store ptr %2, ptr %exn.slot, align 455 %3 = extractvalue { ptr, i32 } %1, 156 store i32 %3, ptr %ehselector.slot, align 457 br label %catch.dispatch58 59catch.dispatch: ; preds = %lpad60 %sel = load i32, ptr %ehselector.slot, align 461 %4 = call i32 @llvm.eh.typeid.for(ptr @_ZTIi) #262 %matches = icmp eq i32 %sel, %463 br i1 %matches, label %catch, label %eh.resume64 65catch: ; preds = %catch.dispatch66 %exn = load ptr, ptr %exn.slot, align 467 %5 = call ptr @__cxa_begin_catch(ptr %exn) #268 %6 = load i32, ptr %5, align 469 store i32 %6, ptr %0, align 470 store i32 2, ptr %retval, align 471 call void @__cxa_end_catch() #272 br label %return73 74try.cont: ; preds = %invoke.cont75 store i32 1, ptr %retval, align 476 br label %return77 78return: ; preds = %try.cont, %catch79 %7 = load i32, ptr %retval, align 480 ret i32 %781 82eh.resume: ; preds = %catch.dispatch83 %exn1 = load ptr, ptr %exn.slot, align 484 %sel2 = load i32, ptr %ehselector.slot, align 485 %lpad.val = insertvalue { ptr, i32 } undef, ptr %exn1, 086 %lpad.val3 = insertvalue { ptr, i32 } %lpad.val, i32 %sel2, 187 resume { ptr, i32 } %lpad.val388}89 90; ASMNFS: ._Z9catchFuncv:91; ASMFS: .csect ._Z9catchFuncv[PR],592; ASM: L..func_begin0:93; ASM: # %bb.0: # %entry94; ASM: mflr 095; ASM: L..tmp0:96; ASM: bl ._Z9throwFuncv97; ASM: nop98; ASM: L..tmp1:99; ASM: # %bb.1: # %invoke.cont100; ASM: li 3, 1101; ASM: L..BB1_2: # %return102; ASM: mtlr 0103; ASM: blr104; ASM: L..BB1_3: # %lpad105; ASM: L..tmp2:106; ASM: bl .__cxa_begin_catch[PR]107; ASM: nop108; ASM: bl .__cxa_end_catch[PR]109; ASM: nop110; ASM: b L..BB1_2111 112; ASM: L.._Z9catchFuncv0:113; ASM: .vbyte 4, 0x00000000 # Traceback table begin114; ASM: .byte 0x00 # Version = 0115; ASM: .byte 0x09 # Language = CPlusPlus116; ASM: .byte 0x20 # -IsGlobalLinkage, -IsOutOfLineEpilogOrPrologue117; ASM: # +HasTraceBackTableOffset, -IsInternalProcedure118; ASM: # -HasControlledStorage, -IsTOCless119; ASM: # -IsFloatingPointPresent120; ASM: # -IsFloatingPointOperationLogOrAbortEnabled121; ASM: .byte 0x41 # -IsInterruptHandler, +IsFunctionNamePresent, -IsAllocaUsed122; ASM: # OnConditionDirective = 0, -IsCRSaved, +IsLRSaved123; ASM: .byte 0x80 # +IsBackChainStored, -IsFixup, NumOfFPRsSaved = 0124; ASM: .byte 0x80 # +HasExtensionTable, -HasVectorInfo, NumOfGPRsSaved = 0125; ASM: .byte 0x00 # NumberOfFixedParms = 0126; ASM: .byte 0x01 # NumberOfFPParms = 0, +HasParmsOnStack127; ASMNFS: .vbyte 4, L.._Z9catchFuncv0-._Z9catchFuncv # Function size128; ASMFS: .vbyte 4, L.._Z9catchFuncv0-._Z9catchFuncv[PR] # Function size129; ASM: .vbyte 2, 0x000d # Function name len = 13130; ASM: .byte "_Z9catchFuncv" # Function Name131; ASM: .byte 0x08 # ExtensionTableFlag = TB_EH_INFO132; ASM: .align 2133; ASM32: .vbyte 4, L..C1-TOC[TC0] # EHInfo Table134; ASM64: .vbyte 8, L..C1-TOC[TC0] # EHInfo Table135; ASM: L..func_end0:136 137; ASMNFS: .csect .gcc_except_table[RO],2138; ASMFS: .csect .gcc_except_table._Z9catchFuncv[RO],2139; ASM: .align 2140; ASM: GCC_except_table1:141; ASM: L..exception0:142; ASM: .byte 255 # @LPStart Encoding = omit143; ASM32: .byte 187 # @TType Encoding = indirect datarel sdata4144; ASM64: .byte 188 # @TType Encoding = indirect datarel sdata8145; ASM32: .byte 37146; ASM64: .byte 41147; ASM: .byte 3 # Call site Encoding = udata4148; ASM: .byte 26149; ASM: .vbyte 4, L..tmp0-L..func_begin0 # >> Call Site 1 <<150; ASM: .vbyte 4, L..tmp1-L..tmp0 # Call between L..tmp0 and L..tmp1151; ASM: .vbyte 4, L..tmp2-L..func_begin0 # jumps to L..tmp2152; ASM: .byte 1 # On action: 1153; ASM: .vbyte 4, L..tmp1-L..func_begin0 # >> Call Site 2 <<154; ASM: .vbyte 4, L..func_end0-L..tmp1 # Call between L..tmp1 and L..func_end0155; ASM: .vbyte 4, 0 # has no landing pad156; ASM: .byte 0 # On action: cleanup157; ASM: L..cst_end0:158; ASM: .byte 1 # >> Action Record 1 <<159; ASM: # Catch TypeInfo 1160; ASM: .byte 0 # No further actions161; ASM: .align 2162; ASM: # >> Catch TypeInfos <<163; ASM32: .vbyte 4, L..C0-TOC[TC0] # TypeInfo 1164; ASM64: .vbyte 8, L..C0-TOC[TC0] # TypeInfo 1165; ASM: L..ttbase0:166; ASM: .align 2167 168; ASMNFS: .csect .eh_info_table[RW],2169; ASMFS: .csect .eh_info_table._Z9catchFuncv[RW],2170; ASM: __ehinfo.1:171; ASM: .vbyte 4, 0172; ASM32: .align 2173; ASM32: .vbyte 4, GCC_except_table1174; ASM32: .vbyte 4, __xlcxx_personality_v1[DS]175; ASM64: .align 3176; ASM64: .vbyte 8, GCC_except_table1177; ASM64: .vbyte 8, __xlcxx_personality_v1[DS]178 179; ASM: .toc180; ASM: L..C0:181; ASM: .tc _ZTIi[TC],_ZTIi[UA]182; ASM: L..C1:183; ASM: .tc __ehinfo.1[TE],__ehinfo.1184 185declare ptr @__cxa_allocate_exception(i32)186declare void @__cxa_throw(ptr, ptr, ptr)187declare i32 @__xlcxx_personality_v1(...)188declare i32 @llvm.eh.typeid.for(ptr)189declare ptr @__cxa_begin_catch(ptr)190declare void @__cxa_end_catch()191