brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 8d68f38 Raw
197 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -O0 -mtriple=aarch64-apple-ios -global-isel -stop-after=irtranslator %s -o - | FileCheck %s3 4@_ZTIi = external global ptr5 6declare i32 @foo(i32)7declare i32 @__gxx_personality_v0(...)8declare i32 @llvm.eh.typeid.for(ptr)9 10define { ptr, i32 } @bar() personality ptr @__gxx_personality_v0 {11  ; CHECK-LABEL: name: bar12  ; CHECK: bb.1 (%ir-block.0):13  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)14  ; CHECK-NEXT: {{  $}}15  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4216  ; CHECK-NEXT:   [[DEF:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF17  ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF18  ; CHECK-NEXT:   G_INVOKE_REGION_START19  ; CHECK-NEXT:   EH_LABEL <mcsymbol >20  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp21  ; CHECK-NEXT:   $w0 = COPY [[C]](s32)22  ; CHECK-NEXT:   BL @foo, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $w0, implicit-def $w023  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp24  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w025  ; CHECK-NEXT:   EH_LABEL <mcsymbol >26  ; CHECK-NEXT:   G_BR %bb.327  ; CHECK-NEXT: {{  $}}28  ; CHECK-NEXT: bb.2.broken (landing-pad):29  ; CHECK-NEXT:   liveins: $x0, $x130  ; CHECK-NEXT: {{  $}}31  ; CHECK-NEXT:   EH_LABEL <mcsymbol >32  ; CHECK-NEXT:   [[DEF2:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF33  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x034  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x135  ; CHECK-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY2]](p0)36  ; CHECK-NEXT:   $x0 = COPY [[COPY1]](p0)37  ; CHECK-NEXT:   $w1 = COPY [[PTRTOINT]](s32)38  ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $w139  ; CHECK-NEXT: {{  $}}40  ; CHECK-NEXT: bb.3.continue:41  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 142  ; CHECK-NEXT:   $x0 = COPY [[DEF]](p0)43  ; CHECK-NEXT:   $w1 = COPY [[C1]](s32)44  ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $w145  %res32 = invoke i32 @foo(i32 42) to label %continue unwind label %broken46 47 48broken:49  %ptr.sel = landingpad { ptr, i32 } catch ptr @_ZTIi50  ret { ptr, i32 } %ptr.sel51 52continue:53  %sel.int = tail call i32 @llvm.eh.typeid.for(ptr @_ZTIi)54  %res.good = insertvalue { ptr, i32 } undef, i32 %sel.int, 155  ret { ptr, i32 } %res.good56}57 58define void @test_invoke_indirect(ptr %callee) personality ptr @__gxx_personality_v0 {59  ; CHECK-LABEL: name: test_invoke_indirect60  ; CHECK: bb.1 (%ir-block.0):61  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)62  ; CHECK-NEXT:   liveins: $x063  ; CHECK-NEXT: {{  $}}64  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr64(p0) = COPY $x065  ; CHECK-NEXT:   G_INVOKE_REGION_START66  ; CHECK-NEXT:   EH_LABEL <mcsymbol >67  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp68  ; CHECK-NEXT:   BLR [[COPY]](p0), csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp69  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp70  ; CHECK-NEXT:   EH_LABEL <mcsymbol >71  ; CHECK-NEXT:   G_BR %bb.372  ; CHECK-NEXT: {{  $}}73  ; CHECK-NEXT: bb.2.broken (landing-pad):74  ; CHECK-NEXT:   liveins: $x0, $x175  ; CHECK-NEXT: {{  $}}76  ; CHECK-NEXT:   EH_LABEL <mcsymbol >77  ; CHECK-NEXT:   [[DEF:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF78  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x079  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x180  ; CHECK-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY2]](p0)81  ; CHECK-NEXT:   RET_ReallyLR82  ; CHECK-NEXT: {{  $}}83  ; CHECK-NEXT: bb.3.continue:84  ; CHECK-NEXT:   RET_ReallyLR85  invoke void %callee() to label %continue unwind label %broken86 87broken:88  landingpad { ptr, i32 } catch ptr @_ZTIi89  ret void90 91continue:92  ret void93}94 95declare void @printf(ptr, ...)96define void @test_invoke_varargs() personality ptr @__gxx_personality_v0 {97  ; CHECK-LABEL: name: test_invoke_varargs98  ; CHECK: bb.1 (%ir-block.0):99  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)100  ; CHECK-NEXT: {{  $}}101  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(p0) = G_CONSTANT i64 0102  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 42103  ; CHECK-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00104  ; CHECK-NEXT:   G_INVOKE_REGION_START105  ; CHECK-NEXT:   EH_LABEL <mcsymbol >106  ; CHECK-NEXT:   ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp107  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $sp108  ; CHECK-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 0109  ; CHECK-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C3]](s64)110  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C1]](s32)111  ; CHECK-NEXT:   G_STORE [[ANYEXT]](s64), [[PTR_ADD]](p0) :: (store (s64) into stack, align 1)112  ; CHECK-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 8113  ; CHECK-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C4]](s64)114  ; CHECK-NEXT:   G_STORE [[C2]](s32), [[PTR_ADD1]](p0) :: (store (s32) into stack + 8, align 1)115  ; CHECK-NEXT:   $x0 = COPY [[C]](p0)116  ; CHECK-NEXT:   BL @printf, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0117  ; CHECK-NEXT:   ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp118  ; CHECK-NEXT:   EH_LABEL <mcsymbol >119  ; CHECK-NEXT:   G_BR %bb.3120  ; CHECK-NEXT: {{  $}}121  ; CHECK-NEXT: bb.2.broken (landing-pad):122  ; CHECK-NEXT:   liveins: $x0, $x1123  ; CHECK-NEXT: {{  $}}124  ; CHECK-NEXT:   EH_LABEL <mcsymbol >125  ; CHECK-NEXT:   [[DEF:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF126  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x0127  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x1128  ; CHECK-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY2]](p0)129  ; CHECK-NEXT:   RET_ReallyLR130  ; CHECK-NEXT: {{  $}}131  ; CHECK-NEXT: bb.3.continue:132  ; CHECK-NEXT:   RET_ReallyLR133  invoke void(ptr, ...) @printf(ptr null, i32 42, float 1.0) to label %continue unwind label %broken134 135broken:136  landingpad { ptr, i32 } catch ptr @_ZTIi137  ret void138 139continue:140  ret void141}142 143@global_var = external global i32144 145declare void @may_throw()146define i32 @test_lpad_phi() personality ptr @__gxx_personality_v0 {147  ; CHECK-LABEL: name: test_lpad_phi148  ; CHECK: bb.1 (%ir-block.0):149  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)150  ; CHECK-NEXT: {{  $}}151  ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42152  ; CHECK-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var153  ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 11154  ; CHECK-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 13155  ; CHECK-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 55156  ; CHECK-NEXT:   G_STORE [[C]](s32), [[GV]](p0) :: (store (s32) into @global_var)157  ; CHECK-NEXT:   G_INVOKE_REGION_START158  ; CHECK-NEXT:   EH_LABEL <mcsymbol >159  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp160  ; CHECK-NEXT:   BL @may_throw, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp161  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp162  ; CHECK-NEXT:   EH_LABEL <mcsymbol >163  ; CHECK-NEXT:   G_BR %bb.3164  ; CHECK-NEXT: {{  $}}165  ; CHECK-NEXT: bb.2.lpad (landing-pad):166  ; CHECK-NEXT:   successors: %bb.3(0x80000000)167  ; CHECK-NEXT:   liveins: $x0, $x1168  ; CHECK-NEXT: {{  $}}169  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[C1]](s32), %bb.1170  ; CHECK-NEXT:   EH_LABEL <mcsymbol >171  ; CHECK-NEXT:   [[DEF:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF172  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0173  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x1174  ; CHECK-NEXT:   [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY1]](p0)175  ; CHECK-NEXT:   G_STORE [[PHI]](s32), [[GV]](p0) :: (store (s32) into @global_var)176  ; CHECK-NEXT:   G_BR %bb.3177  ; CHECK-NEXT: {{  $}}178  ; CHECK-NEXT: bb.3.continue:179  ; CHECK-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI [[C2]](s32), %bb.1, [[C3]](s32), %bb.2180  ; CHECK-NEXT:   $w0 = COPY [[PHI1]](s32)181  ; CHECK-NEXT:   RET_ReallyLR implicit $w0182  store i32 42, ptr @global_var183  invoke void @may_throw()184          to label %continue unwind label %lpad185 186lpad:                                             ; preds = %entry187  %p = phi i32 [ 11, %0 ]  ; Trivial, but -O0 keeps it188  %1 = landingpad { ptr, i32 }189          catch ptr null190  store i32 %p, ptr @global_var191  br label %continue192 193continue:                                         ; preds = %entry, %lpad194  %r.0 = phi i32 [ 13, %0 ], [ 55, %lpad ]195  ret i32 %r.0196}197