137 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-min-jump-table-entries=4 < %s | FileCheck %s \4; RUN: --check-prefix=CHECK-R5; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \6; RUN: -mcpu=pwr10 -ppc-use-absolute-jumptables -ppc-min-jump-table-entries=4 \7; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \8; RUN: --check-prefix=CHECK-A-LE9; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \10; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-min-jump-table-entries=4 < %s | FileCheck %s \11; RUN: --check-prefix=CHECK-R12; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \13; RUN: -mcpu=pwr10 -ppc-use-absolute-jumptables -ppc-min-jump-table-entries=4 \14; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \15; RUN: --check-prefix=CHECK-A-BE16 17 18; This test checks for getting relative and absolute jump table base address19; using PC Relative addressing.20 21define dso_local signext i32 @jumptable(i32 signext %param) {22; CHECK-R-LABEL: jumptable:23; CHECK-R: # %bb.0: # %entry24; CHECK-R-NEXT: addi r4, r3, -125; CHECK-R-NEXT: cmplwi r4, 1926; CHECK-R-NEXT: bgt cr0, .LBB0_327; CHECK-R-NEXT: # %bb.1: # %entry28; CHECK-R-NEXT: rldic r4, r4, 2, 3029; CHECK-R-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 130; CHECK-R-NEXT: lwax r4, r5, r431; CHECK-R-NEXT: add r4, r5, r432; CHECK-R-NEXT: mtctr r433; CHECK-R-NEXT: bctr34; CHECK-R-NEXT: .LBB0_2: # %sw.bb135; CHECK-R-NEXT: li r3, 436; CHECK-R-NEXT: blr37; CHECK-R-NEXT: .LBB0_3: # %sw.default38; CHECK-R-NEXT: li r3, -139; CHECK-R-NEXT: .LBB0_4: # %return40; CHECK-R-NEXT: blr41; CHECK-R-NEXT: .LBB0_5: # %sw.bb242; CHECK-R-NEXT: li r3, 943; CHECK-R-NEXT: blr44; CHECK-R-NEXT: .LBB0_6: # %sw.bb345; CHECK-R-NEXT: li r3, 1646; CHECK-R-NEXT: blr47; CHECK-R-NEXT: .LBB0_7: # %sw.bb448; CHECK-R-NEXT: li r3, 40049; CHECK-R-NEXT: blr50;51; CHECK-A-LE-LABEL: jumptable:52; CHECK-A-LE: # %bb.0: # %entry53; CHECK-A-LE-NEXT: addi r4, r3, -154; CHECK-A-LE-NEXT: cmplwi r4, 1955; CHECK-A-LE-NEXT: bgt cr0, .LBB0_356; CHECK-A-LE-NEXT: # %bb.1: # %entry57; CHECK-A-LE-NEXT: rldic r4, r4, 3, 2958; CHECK-A-LE-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 159; CHECK-A-LE-NEXT: ldx r4, r5, r460; CHECK-A-LE-NEXT: mtctr r461; CHECK-A-LE-NEXT: bctr62; CHECK-A-LE-NEXT: .LBB0_2: # %sw.bb163; CHECK-A-LE-NEXT: li r3, 464; CHECK-A-LE-NEXT: blr65; CHECK-A-LE-NEXT: .LBB0_3: # %sw.default66; CHECK-A-LE-NEXT: li r3, -167; CHECK-A-LE-NEXT: .LBB0_4: # %return68; CHECK-A-LE-NEXT: blr69; CHECK-A-LE-NEXT: .LBB0_5: # %sw.bb270; CHECK-A-LE-NEXT: li r3, 971; CHECK-A-LE-NEXT: blr72; CHECK-A-LE-NEXT: .LBB0_6: # %sw.bb373; CHECK-A-LE-NEXT: li r3, 1674; CHECK-A-LE-NEXT: blr75; CHECK-A-LE-NEXT: .LBB0_7: # %sw.bb476; CHECK-A-LE-NEXT: li r3, 40077; CHECK-A-LE-NEXT: blr78;79; CHECK-A-BE-LABEL: jumptable:80; CHECK-A-BE: # %bb.0: # %entry81; CHECK-A-BE-NEXT: addi r4, r3, -182; CHECK-A-BE-NEXT: cmplwi r4, 1983; CHECK-A-BE-NEXT: bgt cr0, .LBB0_384; CHECK-A-BE-NEXT: # %bb.1: # %entry85; CHECK-A-BE-NEXT: rldic r4, r4, 2, 3086; CHECK-A-BE-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 187; CHECK-A-BE-NEXT: lwax r4, r5, r488; CHECK-A-BE-NEXT: mtctr r489; CHECK-A-BE-NEXT: bctr90; CHECK-A-BE-NEXT: .LBB0_2: # %sw.bb191; CHECK-A-BE-NEXT: li r3, 492; CHECK-A-BE-NEXT: blr93; CHECK-A-BE-NEXT: .LBB0_3: # %sw.default94; CHECK-A-BE-NEXT: li r3, -195; CHECK-A-BE-NEXT: .LBB0_4: # %return96; CHECK-A-BE-NEXT: blr97; CHECK-A-BE-NEXT: .LBB0_5: # %sw.bb298; CHECK-A-BE-NEXT: li r3, 999; CHECK-A-BE-NEXT: blr100; CHECK-A-BE-NEXT: .LBB0_6: # %sw.bb3101; CHECK-A-BE-NEXT: li r3, 16102; CHECK-A-BE-NEXT: blr103; CHECK-A-BE-NEXT: .LBB0_7: # %sw.bb4104; CHECK-A-BE-NEXT: li r3, 400105; CHECK-A-BE-NEXT: blr106 107 108entry:109 switch i32 %param, label %sw.default [110 i32 1, label %return111 i32 2, label %sw.bb1112 i32 3, label %sw.bb2113 i32 4, label %sw.bb3114 i32 20, label %sw.bb4115 ]116 117sw.bb1: ; preds = %entry118 br label %return119 120sw.bb2: ; preds = %entry121 br label %return122 123sw.bb3: ; preds = %entry124 br label %return125 126sw.bb4: ; preds = %entry127 br label %return128 129sw.default: ; preds = %entry130 br label %return131 132return: ; preds = %entry, %sw.default, %sw.bb4, %sw.bb3, %sw.bb2, %sw.bb1133 %retval.0 = phi i32 [ -1, %sw.default ], [ 400, %sw.bb4 ], [ 16, %sw.bb3 ],134 [ 9, %sw.bb2 ], [ 4, %sw.bb1 ], [ %param, %entry ]135 ret i32 %retval.0136}137