• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
2; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s \
3; RUN:   --check-prefix=CHECK-R
4; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
5; RUN:   -mcpu=pwr10 -ppc-use-absolute-jumptables \
6; RUN:   -ppc-asm-full-reg-names < %s | FileCheck %s \
7; RUN:   --check-prefix=CHECK-A-LE
8; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \
9; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s \
10; RUN:   --check-prefix=CHECK-R
11; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \
12; RUN:   -mcpu=pwr10 -ppc-use-absolute-jumptables \
13; RUN:   -ppc-asm-full-reg-names < %s | FileCheck %s \
14; RUN:   --check-prefix=CHECK-A-BE
15
16
17; This test checks for getting relative and absolute jump table base address
18; using PC Relative addressing.
19
20define dso_local signext i32 @jumptable(i32 signext %param) {
21; CHECK-R-LABEL: jumptable:
22; CHECK-R:       # %bb.1: # %entry
23; CHECK-R-NEXT:    rldic r4, r4
24; CHECK-R-NEXT:    paddi r5, 0, .LJTI0_0@PCREL, 1
25; CHECK-R-NEXT:    lwax r4, r4, r5
26; CHECK-R-NEXT:    add r4, r4, r5
27; CHECK-R-NEXT:    mtctr r4
28; CHECK-R-NEXT:    bctr
29; CHECK-A-LE-LABEL: jumptable:
30; CHECK-A-LE:       # %bb.1: # %entry
31; CHECK-A-LE-NEXT:    rldic r4, r4
32; CHECK-A-LE-NEXT:    paddi r5, 0, .LJTI0_0@PCREL, 1
33; CHECK-A-LE-NEXT:    ldx r4, r4, r5
34; CHECK-A-LE-NEXT:    mtctr r4
35; CHECK-A-LE-NEXT:    bctr
36; CHECK-A-BE-LABEL: jumptable:
37; CHECK-A-BE:       # %bb.1: # %entry
38; CHECK-A-BE-NEXT:    rldic r4, r4
39; CHECK-A-BE-NEXT:    paddi r5, 0, .LJTI0_0@PCREL, 1
40; CHECK-A-BE-NEXT:    lwax r4, r4, r5
41; CHECK-A-BE-NEXT:    mtctr r4
42; CHECK-A-BE-NEXT:    bctr
43
44
45entry:
46  switch i32 %param, label %sw.default [
47    i32 1, label %return
48    i32 2, label %sw.bb1
49    i32 3, label %sw.bb2
50    i32 4, label %sw.bb3
51    i32 20, label %sw.bb4
52  ]
53
54sw.bb1:                                           ; preds = %entry
55  br label %return
56
57sw.bb2:                                           ; preds = %entry
58  br label %return
59
60sw.bb3:                                           ; preds = %entry
61  br label %return
62
63sw.bb4:                                           ; preds = %entry
64  br label %return
65
66sw.default:                                       ; preds = %entry
67  br label %return
68
69return:  ; preds = %entry, %sw.default, %sw.bb4, %sw.bb3, %sw.bb2, %sw.bb1
70  %retval.0 = phi i32 [ -1, %sw.default ], [ 400, %sw.bb4 ], [ 16, %sw.bb3 ],
71                      [ 9, %sw.bb2 ], [ 4, %sw.bb1 ], [ %param, %entry ]
72  ret i32 %retval.0
73}
74