brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · bb5f3f4 Raw
131 lines · plain
1; RUN: llc < %s -mtriple=xcore | FileCheck %s2 3declare void @g()4declare i32 @__gxx_personality_v0(...)5declare i32 @llvm.eh.typeid.for(ptr) nounwind readnone6declare ptr @__cxa_begin_catch(ptr)7declare void @__cxa_end_catch()8declare ptr @__cxa_allocate_exception(i32)9declare void @__cxa_throw(ptr, ptr, ptr)10 11@_ZTIi = external constant ptr12@_ZTId = external constant ptr13 14; CHECK-LABEL: fn_typeid:15; CHECK: .cfi_startproc16; CHECK: mkmsk r0, 117; CHECK: retsp 018; CHECK: .cfi_endproc19define i32 @fn_typeid() {20entry:21  %0 = call i32 @llvm.eh.typeid.for(ptr @_ZTIi) nounwind22  ret i32 %023}24 25; CHECK-LABEL: fn_throw26; CHECK: .cfi_startproc27; CHECK: entsp 128; CHECK: .cfi_def_cfa_offset 429; CHECK: .cfi_offset 15, 030; CHECK: ldc r0, 431; CHECK: bl __cxa_allocate_exception32; CHECK: ldaw r1, dp[_ZTIi]33; CHECK: ldc r2, 034; CHECK: bl __cxa_throw35define void @fn_throw() {36entry:37  %0 = call ptr @__cxa_allocate_exception(i32 4) nounwind38  call void @__cxa_throw(ptr %0, ptr @_ZTIi, ptr null) noreturn39  unreachable40}41 42; CHECK-LABEL: fn_catch:43; CHECK-NEXT: [[START:.L[a-zA-Z0-9_]+]]44; CHECK: .cfi_startproc45; CHECK: .cfi_personality 0, __gxx_personality_v046; CHECK: .cfi_lsda 0, [[LSDA:.L[a-zA-Z0-9_]+]]47; CHECK: entsp 448; CHECK: .cfi_def_cfa_offset 1649; CHECK: .cfi_offset 15, 050define void @fn_catch() personality ptr @__gxx_personality_v0 {51entry:52 53; N.B. we alloc no variables, hence force compiler to spill54; CHECK: stw r4, sp[3]55; CHECK: .cfi_offset 4, -456; CHECK: stw r5, sp[2]57; CHECK: .cfi_offset 5, -858; CHECK: stw r6, sp[1]59; CHECK: .cfi_offset 6, -1260; CHECK: [[PRE_G:.L[a-zA-Z0-9_]+]]61; CHECK: bl g62; CHECK: [[POST_G:.L[a-zA-Z0-9_]+]]63; CHECK: [[RETURN:^.L[a-zA-Z0-9_]+]]64; CHECK: ldw r6, sp[1]65; CHECK: ldw r5, sp[2]66; CHECK: ldw r4, sp[3]67; CHECK: retsp 468  invoke void @g() to label %cont unwind label %lpad69cont:70  ret void71 72; CHECK: {{.L[a-zA-Z0-9_]+}}73; CHECK: [[LANDING:.L[a-zA-Z0-9_]+]]74; CHECK: mov r5, r175; CHECK: mov r4, r076; CHECK: bl __cxa_begin_catch77; CHECK: ldw r6, r0[0]78; CHECK: bl __cxa_end_catch79lpad:80  %0 = landingpad { ptr, i32 }81          cleanup82          catch ptr @_ZTIi83          catch ptr @_ZTId84  %1 = extractvalue { ptr, i32 } %0, 085  %2 = extractvalue { ptr, i32 } %0, 186  %3 = call ptr @__cxa_begin_catch(ptr %1) nounwind87  %4 = load i32, ptr %388  call void @__cxa_end_catch() nounwind89 90; CHECK: eq r0, r6, r591; CHECK: bf r0, [[RETURN]]92; CHECK: mov r0, r493; CHECK: bl _Unwind_Resume94; CHECK: [[END:.L[a-zA-Z0-9_]+]]95; CHECK: .cfi_endproc96  %5 = icmp eq i32 %4, %297  br i1 %5, label %Resume, label %Exit98Resume:99  resume { ptr, i32 } %0100Exit:101  ret void102}103 104; CHECK: [[LSDA]]:105; CHECK: .byte  255106; CHECK: .byte  0107; CHECK: .uleb128 [[TTBASE:.Lttbase[0-9]+]]-[[TTBASEREF:.Lttbaseref[0-9]+]]108; CHECK: [[TTBASEREF]]:109; CHECK: .byte  1110; CHECK: .uleb128 [[CST_END:.Lcst_end[0-9]+]]-[[CST_BEGIN:.Lcst_begin[0-9]+]]111; CHECK: [[CST_BEGIN]]:112; CHECK: .uleb128 [[PRE_G]]-[[START]]113; CHECK: .uleb128 [[POST_G]]-[[PRE_G]]114; CHECK: .uleb128 [[LANDING]]-[[START]]115; CHECK: .byte 5116; CHECK: .uleb128 [[POST_G]]-[[START]]117; CHECK: .uleb128 [[END]]-[[POST_G]]118; CHECK: .byte 0119; CHECK: .byte 0120; CHECK: [[CST_END]]:121; CHECK: .byte 0122; CHECK: .byte 0123; CHECK: .byte 1124; CHECK: .byte 125125; CHECK: .byte 2126; CHECK: .byte 125127; CHECK: .p2align 2128; CHECK: .long _ZTIi129; CHECK: .long _ZTId130; CHECK: [[TTBASE]]:131