brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 8e570f0 Raw
128 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumbv7m-arm-none-eabi | FileCheck %s3 4define internal i32 @table_switch(i32 %x) "branch-target-enforcement" {5; CHECK-LABEL: table_switch:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    bti8; CHECK-NEXT:    subs r1, r0, #19; CHECK-NEXT:    cmp r1, #310; CHECK-NEXT:    bhi .LBB0_611; CHECK-NEXT:  @ %bb.1: @ %entry12; CHECK-NEXT:  .LCPI0_0:13; CHECK-NEXT:    tbb [pc, r1]14; CHECK-NEXT:  @ %bb.2:15; CHECK-NEXT:  .LJTI0_0:16; CHECK-NEXT:    .byte (.LBB0_7-(.LCPI0_0+4))/217; CHECK-NEXT:    .byte (.LBB0_3-(.LCPI0_0+4))/218; CHECK-NEXT:    .byte (.LBB0_4-(.LCPI0_0+4))/219; CHECK-NEXT:    .byte (.LBB0_5-(.LCPI0_0+4))/220; CHECK-NEXT:    .p2align 121; CHECK-NEXT:  .LBB0_3: @ %bb222; CHECK-NEXT:    movs r0, #223; CHECK-NEXT:    bx lr24; CHECK-NEXT:  .LBB0_4: @ %bb325; CHECK-NEXT:    movs r0, #326; CHECK-NEXT:    bx lr27; CHECK-NEXT:  .LBB0_5: @ %bb428; CHECK-NEXT:    movs r0, #529; CHECK-NEXT:    bx lr30; CHECK-NEXT:  .LBB0_6: @ %sw.epilog31; CHECK-NEXT:    movs r0, #032; CHECK-NEXT:  .LBB0_7: @ %return33; CHECK-NEXT:    bx lr34entry:35  switch i32 %x, label %sw.epilog [36    i32 1, label %bb137    i32 2, label %bb238    i32 3, label %bb339    i32 4, label %bb440  ]41 42bb1:43  br label %return44bb2:45  br label %return46bb3:47  br label %return48bb4:49  br label %return50sw.epilog:51  br label %return52 53return:54  %ret = phi i32 [ 0, %sw.epilog ], [ 1, %bb1 ], [ 2, %bb2 ], [ 3, %bb3 ], [ 5, %bb4 ]55  ret i32 %ret56}57 58@computed_goto_cases = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@computed_goto, %return), ptr blockaddress(@computed_goto, %case_1)], align 459 60define internal i32 @computed_goto(i32 %x) "branch-target-enforcement" {61; CHECK-LABEL: computed_goto:62; CHECK:       @ %bb.0: @ %entry63; CHECK-NEXT:    bti64; CHECK-NEXT:    movw r1, :lower16:.Lcomputed_goto_cases65; CHECK-NEXT:    movt r1, :upper16:.Lcomputed_goto_cases66; CHECK-NEXT:    ldr.w r0, [r1, r0, lsl #2]67; CHECK-NEXT:    mov pc, r068; CHECK-NEXT:  .Ltmp3: @ Block address taken69; CHECK-NEXT:  .LBB1_1: @ %return70; CHECK-NEXT:    bti71; CHECK-NEXT:    movs r0, #272; CHECK-NEXT:    bx lr73; CHECK-NEXT:  .Ltmp4: @ Block address taken74; CHECK-NEXT:  .LBB1_2: @ %case_175; CHECK-NEXT:    bti76; CHECK-NEXT:    movs r0, #177; CHECK-NEXT:    bx lr78entry:79  %arrayidx = getelementptr inbounds [2 x ptr], ptr @computed_goto_cases, i32 0, i32 %x80  %0 = load ptr, ptr %arrayidx, align 481  indirectbr ptr %0, [label %return, label %case_1]82 83case_1:84  br label %return85 86return:87  %ret = phi i32 [ 1, %case_1 ], [ 2, %entry ]88  ret i32 %ret89}90 91declare void @may_throw()92declare void @consume_exception(ptr)93declare i32 @__gxx_personality_v0(...)94 95define internal i32 @exception_handling(i32 %0) "branch-target-enforcement" personality ptr @__gxx_personality_v0 {96; CHECK-LABEL: exception_handling:97; CHECK:       @ %bb.0:98; CHECK-NEXT:    bti99; CHECK-NEXT:    .save  {r7, lr}100; CHECK-NEXT:    push   {r7, lr}101; CHECK-NEXT:  .Ltmp0:102; CHECK-NEXT:    bl     may_throw103; CHECK-NEXT:  .Ltmp1:104; CHECK-NEXT:  @ %bb.1:105; CHECK-NEXT:    movs   r0, #0106; CHECK-NEXT:    pop    {r7, pc}107; CHECK-NEXT:  .LBB2_2:108; CHECK-NEXT:  .Ltmp2:109; CHECK-NEXT:    bti110; CHECK-NEXT:    bl     consume_exception111; CHECK-NEXT:    movs   r0, #1112; CHECK-NEXT:    pop    {r7, pc}113entry:114  invoke void @may_throw()115          to label %return unwind label %lpad116 117lpad:118  %1 = landingpad { ptr, i32 }119          catch ptr null120  %2 = extractvalue { ptr, i32 } %1, 0121  call void @consume_exception(ptr %2)122  br label %return123 124return:125  %retval.0 = phi i32 [ 1, %lpad ], [ 0, %entry ]126  ret i32 %retval.0127}128