136 lines · plain
1; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 -arm-adjust-jump-tables=0 %s -o - | FileCheck %s2; RUN: llc -mtriple=thumbv6-eabi -mcpu=cortex-m0 -arm-adjust-jump-tables=0 %s -o - | FileCheck %s3 4; Do not use tbb / tbh if any destination is before the jumptable.5; rdar://71029176 7define i16 @main__getopt_internal_2E_exit_2E_ce(i32, i1 %b) nounwind {8; CHECK: main__getopt_internal_2E_exit_2E_ce9; CHECK-NOT: tbb10; CHECK-NOT: tbh11; 32-bit jump tables use explicit branches, not data regions, so make sure12; we don't annotate this region.13; CHECK-NOT: data_region14entry:15 br i1 %b, label %codeRepl127.exitStub, label %newFuncRoot16 17codeRepl127.exitStub: ; preds = %_getopt_internal.exit.ce18 ; Add an explicit edge back to before the jump table to ensure this block19 ; is placed first.20 br i1 %b, label %newFuncRoot, label %codeRepl127.exitStub.exit21 22codeRepl127.exitStub.exit:23 ret i16 024 25parse_options.exit.loopexit.exitStub: ; preds = %_getopt_internal.exit.ce26 ret i16 127 28bb1.i.exitStub: ; preds = %_getopt_internal.exit.ce29 ret i16 230 31bb90.i.exitStub: ; preds = %_getopt_internal.exit.ce32 ret i16 333 34codeRepl104.exitStub: ; preds = %_getopt_internal.exit.ce35 ret i16 436 37codeRepl113.exitStub: ; preds = %_getopt_internal.exit.ce38 ret i16 539 40codeRepl51.exitStub: ; preds = %_getopt_internal.exit.ce41 ret i16 642 43codeRepl70.exitStub: ; preds = %_getopt_internal.exit.ce44 ret i16 745 46codeRepl119.exitStub: ; preds = %_getopt_internal.exit.ce47 ret i16 848 49codeRepl93.exitStub: ; preds = %_getopt_internal.exit.ce50 ret i16 951 52codeRepl101.exitStub: ; preds = %_getopt_internal.exit.ce53 ret i16 1054 55codeRepl120.exitStub: ; preds = %_getopt_internal.exit.ce56 ret i16 1157 58codeRepl89.exitStub: ; preds = %_getopt_internal.exit.ce59 ret i16 1260 61codeRepl45.exitStub: ; preds = %_getopt_internal.exit.ce62 ret i16 1363 64codeRepl58.exitStub: ; preds = %_getopt_internal.exit.ce65 ret i16 1466 67codeRepl46.exitStub: ; preds = %_getopt_internal.exit.ce68 ret i16 1569 70codeRepl50.exitStub: ; preds = %_getopt_internal.exit.ce71 ret i16 1672 73codeRepl52.exitStub: ; preds = %_getopt_internal.exit.ce74 ret i16 1775 76codeRepl53.exitStub: ; preds = %_getopt_internal.exit.ce77 ret i16 1878 79codeRepl61.exitStub: ; preds = %_getopt_internal.exit.ce80 ret i16 1981 82codeRepl85.exitStub: ; preds = %_getopt_internal.exit.ce83 ret i16 2084 85codeRepl97.exitStub: ; preds = %_getopt_internal.exit.ce86 ret i16 2187 88codeRepl79.exitStub: ; preds = %_getopt_internal.exit.ce89 ret i16 2290 91codeRepl102.exitStub: ; preds = %_getopt_internal.exit.ce92 ret i16 2393 94codeRepl54.exitStub: ; preds = %_getopt_internal.exit.ce95 ret i16 2496 97codeRepl57.exitStub: ; preds = %_getopt_internal.exit.ce98 ret i16 2599 100codeRepl103.exitStub: ; preds = %_getopt_internal.exit.ce101 ret i16 26102 103newFuncRoot:104 br label %_getopt_internal.exit.ce105 106_getopt_internal.exit.ce: ; preds = %newFuncRoot107 switch i32 %0, label %codeRepl127.exitStub [108 i32 -1, label %parse_options.exit.loopexit.exitStub109 i32 0, label %bb1.i.exitStub110 i32 63, label %bb90.i.exitStub111 i32 66, label %codeRepl104.exitStub112 i32 67, label %codeRepl113.exitStub113 i32 71, label %codeRepl51.exitStub114 i32 77, label %codeRepl70.exitStub115 i32 78, label %codeRepl119.exitStub116 i32 80, label %codeRepl93.exitStub117 i32 81, label %codeRepl101.exitStub118 i32 82, label %codeRepl120.exitStub119 i32 88, label %codeRepl89.exitStub120 i32 97, label %codeRepl45.exitStub121 i32 98, label %codeRepl58.exitStub122 i32 99, label %codeRepl46.exitStub123 i32 100, label %codeRepl50.exitStub124 i32 104, label %codeRepl52.exitStub125 i32 108, label %codeRepl53.exitStub126 i32 109, label %codeRepl61.exitStub127 i32 110, label %codeRepl85.exitStub128 i32 111, label %codeRepl97.exitStub129 i32 113, label %codeRepl79.exitStub130 i32 114, label %codeRepl102.exitStub131 i32 115, label %codeRepl54.exitStub132 i32 116, label %codeRepl57.exitStub133 i32 118, label %codeRepl103.exitStub134 ]135}136