1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-min-jump-table-entries=4 < %s | FileCheck %s \
; RUN: --check-prefix=CHECK-R
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-use-absolute-jumptables -ppc-min-jump-table-entries=4 \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \
; RUN: --check-prefix=CHECK-A-LE
; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-min-jump-table-entries=4 < %s | FileCheck %s \
; RUN: --check-prefix=CHECK-R
; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \
; RUN: -mcpu=pwr10 -ppc-use-absolute-jumptables -ppc-min-jump-table-entries=4 \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s \
; RUN: --check-prefix=CHECK-A-BE
; This test checks for getting relative and absolute jump table base address
; using PC Relative addressing.
define dso_local signext i32 @jumptable(i32 signext %param) {
; CHECK-R-LABEL: jumptable:
; CHECK-R: # %bb.0: # %entry
; CHECK-R-NEXT: addi r4, r3, -1
; CHECK-R-NEXT: cmplwi r4, 19
; CHECK-R-NEXT: bgt cr0, .LBB0_3
; CHECK-R-NEXT: # %bb.1: # %entry
; CHECK-R-NEXT: rldic r4, r4, 2, 30
; CHECK-R-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 1
; CHECK-R-NEXT: lwax r4, r5, r4
; CHECK-R-NEXT: add r4, r5, r4
; CHECK-R-NEXT: mtctr r4
; CHECK-R-NEXT: bctr
; CHECK-R-NEXT: .LBB0_2: # %sw.bb1
; CHECK-R-NEXT: li r3, 4
; CHECK-R-NEXT: blr
; CHECK-R-NEXT: .LBB0_3: # %sw.default
; CHECK-R-NEXT: li r3, -1
; CHECK-R-NEXT: .LBB0_4: # %return
; CHECK-R-NEXT: blr
; CHECK-R-NEXT: .LBB0_5: # %sw.bb2
; CHECK-R-NEXT: li r3, 9
; CHECK-R-NEXT: blr
; CHECK-R-NEXT: .LBB0_6: # %sw.bb3
; CHECK-R-NEXT: li r3, 16
; CHECK-R-NEXT: blr
; CHECK-R-NEXT: .LBB0_7: # %sw.bb4
; CHECK-R-NEXT: li r3, 400
; CHECK-R-NEXT: blr
;
; CHECK-A-LE-LABEL: jumptable:
; CHECK-A-LE: # %bb.0: # %entry
; CHECK-A-LE-NEXT: addi r4, r3, -1
; CHECK-A-LE-NEXT: cmplwi r4, 19
; CHECK-A-LE-NEXT: bgt cr0, .LBB0_3
; CHECK-A-LE-NEXT: # %bb.1: # %entry
; CHECK-A-LE-NEXT: rldic r4, r4, 3, 29
; CHECK-A-LE-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 1
; CHECK-A-LE-NEXT: ldx r4, r5, r4
; CHECK-A-LE-NEXT: mtctr r4
; CHECK-A-LE-NEXT: bctr
; CHECK-A-LE-NEXT: .LBB0_2: # %sw.bb1
; CHECK-A-LE-NEXT: li r3, 4
; CHECK-A-LE-NEXT: blr
; CHECK-A-LE-NEXT: .LBB0_3: # %sw.default
; CHECK-A-LE-NEXT: li r3, -1
; CHECK-A-LE-NEXT: .LBB0_4: # %return
; CHECK-A-LE-NEXT: blr
; CHECK-A-LE-NEXT: .LBB0_5: # %sw.bb2
; CHECK-A-LE-NEXT: li r3, 9
; CHECK-A-LE-NEXT: blr
; CHECK-A-LE-NEXT: .LBB0_6: # %sw.bb3
; CHECK-A-LE-NEXT: li r3, 16
; CHECK-A-LE-NEXT: blr
; CHECK-A-LE-NEXT: .LBB0_7: # %sw.bb4
; CHECK-A-LE-NEXT: li r3, 400
; CHECK-A-LE-NEXT: blr
;
; CHECK-A-BE-LABEL: jumptable:
; CHECK-A-BE: # %bb.0: # %entry
; CHECK-A-BE-NEXT: addi r4, r3, -1
; CHECK-A-BE-NEXT: cmplwi r4, 19
; CHECK-A-BE-NEXT: bgt cr0, .LBB0_3
; CHECK-A-BE-NEXT: # %bb.1: # %entry
; CHECK-A-BE-NEXT: rldic r4, r4, 2, 30
; CHECK-A-BE-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 1
; CHECK-A-BE-NEXT: lwax r4, r5, r4
; CHECK-A-BE-NEXT: mtctr r4
; CHECK-A-BE-NEXT: bctr
; CHECK-A-BE-NEXT: .LBB0_2: # %sw.bb1
; CHECK-A-BE-NEXT: li r3, 4
; CHECK-A-BE-NEXT: blr
; CHECK-A-BE-NEXT: .LBB0_3: # %sw.default
; CHECK-A-BE-NEXT: li r3, -1
; CHECK-A-BE-NEXT: .LBB0_4: # %return
; CHECK-A-BE-NEXT: blr
; CHECK-A-BE-NEXT: .LBB0_5: # %sw.bb2
; CHECK-A-BE-NEXT: li r3, 9
; CHECK-A-BE-NEXT: blr
; CHECK-A-BE-NEXT: .LBB0_6: # %sw.bb3
; CHECK-A-BE-NEXT: li r3, 16
; CHECK-A-BE-NEXT: blr
; CHECK-A-BE-NEXT: .LBB0_7: # %sw.bb4
; CHECK-A-BE-NEXT: li r3, 400
; CHECK-A-BE-NEXT: blr
entry:
switch i32 %param, label %sw.default [
i32 1, label %return
i32 2, label %sw.bb1
i32 3, label %sw.bb2
i32 4, label %sw.bb3
i32 20, label %sw.bb4
]
sw.bb1: ; preds = %entry
br label %return
sw.bb2: ; preds = %entry
br label %return
sw.bb3: ; preds = %entry
br label %return
sw.bb4: ; preds = %entry
br label %return
sw.default: ; preds = %entry
br label %return
return: ; preds = %entry, %sw.default, %sw.bb4, %sw.bb3, %sw.bb2, %sw.bb1
%retval.0 = phi i32 [ -1, %sw.default ], [ 400, %sw.bb4 ], [ 16, %sw.bb3 ],
[ 9, %sw.bb2 ], [ 4, %sw.bb1 ], [ %param, %entry ]
ret i32 %retval.0
}
|