xref: /llvm-project/llvm/test/CodeGen/PowerPC/cpu-supports.ll (revision 67c1c1dbb6cd473ce302079d0b3791ff461b7bba)
1*67c1c1dbSNemanja Ivanovic; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2*67c1c1dbSNemanja Ivanovic; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names \
3*67c1c1dbSNemanja Ivanovic; RUN:   -mtriple=powerpc64-linux-gnu < %s | FileCheck  %s \
4*67c1c1dbSNemanja Ivanovic; RUN:   -check-prefix=BE64
5*67c1c1dbSNemanja Ivanovic; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names \
6*67c1c1dbSNemanja Ivanovic; RUN:   -mtriple=powerpc-linux-gnu < %s | FileCheck  %s \
7*67c1c1dbSNemanja Ivanovic; RUN:   -check-prefix=BE32
8*67c1c1dbSNemanja Ivanovic; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names \
9*67c1c1dbSNemanja Ivanovic; RUN:   -mtriple=powerpc64le-linux-gnu < %s | FileCheck  %s \
10*67c1c1dbSNemanja Ivanovic; RUN:   -check-prefix=LE
11*67c1c1dbSNemanja Ivanovicdefine dso_local signext i32 @test(i32 noundef signext %a) local_unnamed_addr #0 {
12*67c1c1dbSNemanja Ivanovic; BE64-LABEL: test:
13*67c1c1dbSNemanja Ivanovic; BE64:       # %bb.0: # %entry
14*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    lwz r4, -28772(r13)
15*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    andis. r4, r4, 128
16*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    bne cr0, .LBB0_3
17*67c1c1dbSNemanja Ivanovic; BE64-NEXT:  # %bb.1: # %if.else
18*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    lwz r4, -28776(r13)
19*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    andis. r4, r4, 1024
20*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    bne cr0, .LBB0_4
21*67c1c1dbSNemanja Ivanovic; BE64-NEXT:  # %bb.2: # %if.else3
22*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    lwz r4, -28764(r13)
23*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    cmplwi r4, 39
24*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    addi r4, r3, 5
25*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    slwi r3, r3, 1
26*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    iseleq r3, r3, r4
27*67c1c1dbSNemanja Ivanovic; BE64-NEXT:  .LBB0_3: # %return
28*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    extsw r3, r3
29*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    blr
30*67c1c1dbSNemanja Ivanovic; BE64-NEXT:  .LBB0_4: # %if.then2
31*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    addi r3, r3, -5
32*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    extsw r3, r3
33*67c1c1dbSNemanja Ivanovic; BE64-NEXT:    blr
34*67c1c1dbSNemanja Ivanovic; BE64:       .quad   __parse_hwcap_and_convert_at_platform
35*67c1c1dbSNemanja Ivanovic;
36*67c1c1dbSNemanja Ivanovic; BE32-LABEL: test:
37*67c1c1dbSNemanja Ivanovic; BE32:       # %bb.0: # %entry
38*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    lwz r4, -28732(r2)
39*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    andis. r4, r4, 128
40*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    bnelr cr0
41*67c1c1dbSNemanja Ivanovic; BE32-NEXT:  # %bb.1: # %if.else
42*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    lwz r4, -28736(r2)
43*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    andis. r4, r4, 1024
44*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    bne cr0, .LBB0_3
45*67c1c1dbSNemanja Ivanovic; BE32-NEXT:  # %bb.2: # %if.else3
46*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    lwz r4, -28724(r2)
47*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    cmplwi r4, 39
48*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    addi r4, r3, 5
49*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    slwi r3, r3, 1
50*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    iseleq r3, r3, r4
51*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    blr
52*67c1c1dbSNemanja Ivanovic; BE32-NEXT:  .LBB0_3: # %if.then2
53*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    addi r3, r3, -5
54*67c1c1dbSNemanja Ivanovic; BE32-NEXT:    blr
55*67c1c1dbSNemanja Ivanovic; BE32:       .long   __parse_hwcap_and_convert_at_platform
56*67c1c1dbSNemanja Ivanovic;
57*67c1c1dbSNemanja Ivanovic; LE-LABEL: test:
58*67c1c1dbSNemanja Ivanovic; LE:       # %bb.0: # %entry
59*67c1c1dbSNemanja Ivanovic; LE-NEXT:    lwz r4, -28776(r13)
60*67c1c1dbSNemanja Ivanovic; LE-NEXT:    andis. r4, r4, 128
61*67c1c1dbSNemanja Ivanovic; LE-NEXT:    bne cr0, .LBB0_3
62*67c1c1dbSNemanja Ivanovic; LE-NEXT:  # %bb.1: # %if.else
63*67c1c1dbSNemanja Ivanovic; LE-NEXT:    lwz r4, -28772(r13)
64*67c1c1dbSNemanja Ivanovic; LE-NEXT:    andis. r4, r4, 1024
65*67c1c1dbSNemanja Ivanovic; LE-NEXT:    bne cr0, .LBB0_4
66*67c1c1dbSNemanja Ivanovic; LE-NEXT:  # %bb.2: # %if.else3
67*67c1c1dbSNemanja Ivanovic; LE-NEXT:    lwz r4, -28764(r13)
68*67c1c1dbSNemanja Ivanovic; LE-NEXT:    cmplwi r4, 39
69*67c1c1dbSNemanja Ivanovic; LE-NEXT:    addi r4, r3, 5
70*67c1c1dbSNemanja Ivanovic; LE-NEXT:    slwi r3, r3, 1
71*67c1c1dbSNemanja Ivanovic; LE-NEXT:    iseleq r3, r3, r4
72*67c1c1dbSNemanja Ivanovic; LE-NEXT:  .LBB0_3: # %return
73*67c1c1dbSNemanja Ivanovic; LE-NEXT:    extsw r3, r3
74*67c1c1dbSNemanja Ivanovic; LE-NEXT:    blr
75*67c1c1dbSNemanja Ivanovic; LE-NEXT:  .LBB0_4: # %if.then2
76*67c1c1dbSNemanja Ivanovic; LE-NEXT:    addi r3, r3, -5
77*67c1c1dbSNemanja Ivanovic; LE-NEXT:    extsw r3, r3
78*67c1c1dbSNemanja Ivanovic; LE-NEXT:    blr
79*67c1c1dbSNemanja Ivanovic; LE:       .quad   __parse_hwcap_and_convert_at_platform
80*67c1c1dbSNemanja Ivanovicentry:
81*67c1c1dbSNemanja Ivanovic  %cpu_supports = tail call i32 @llvm.ppc.fixed.addr.ld(i32 2)
82*67c1c1dbSNemanja Ivanovic  %0 = and i32 %cpu_supports, 8388608
83*67c1c1dbSNemanja Ivanovic  %.not = icmp eq i32 %0, 0
84*67c1c1dbSNemanja Ivanovic  br i1 %.not, label %if.else, label %return
85*67c1c1dbSNemanja Ivanovic
86*67c1c1dbSNemanja Ivanovicif.else:                                          ; preds = %entry
87*67c1c1dbSNemanja Ivanovic  %cpu_supports1 = tail call i32 @llvm.ppc.fixed.addr.ld(i32 1)
88*67c1c1dbSNemanja Ivanovic  %1 = and i32 %cpu_supports1, 67108864
89*67c1c1dbSNemanja Ivanovic  %.not12 = icmp eq i32 %1, 0
90*67c1c1dbSNemanja Ivanovic  br i1 %.not12, label %if.else3, label %if.then2
91*67c1c1dbSNemanja Ivanovic
92*67c1c1dbSNemanja Ivanovicif.then2:                                         ; preds = %if.else
93*67c1c1dbSNemanja Ivanovic  %sub = add nsw i32 %a, -5
94*67c1c1dbSNemanja Ivanovic  br label %return
95*67c1c1dbSNemanja Ivanovic
96*67c1c1dbSNemanja Ivanovicif.else3:                                         ; preds = %if.else
97*67c1c1dbSNemanja Ivanovic  %cpu_is = tail call i32 @llvm.ppc.fixed.addr.ld(i32 3)
98*67c1c1dbSNemanja Ivanovic  %2 = icmp eq i32 %cpu_is, 39
99*67c1c1dbSNemanja Ivanovic  br i1 %2, label %if.then4, label %if.end6
100*67c1c1dbSNemanja Ivanovic
101*67c1c1dbSNemanja Ivanovicif.then4:                                         ; preds = %if.else3
102*67c1c1dbSNemanja Ivanovic  %add = shl nsw i32 %a, 1
103*67c1c1dbSNemanja Ivanovic  br label %return
104*67c1c1dbSNemanja Ivanovic
105*67c1c1dbSNemanja Ivanovicif.end6:                                          ; preds = %if.else3
106*67c1c1dbSNemanja Ivanovic  %add7 = add nsw i32 %a, 5
107*67c1c1dbSNemanja Ivanovic  br label %return
108*67c1c1dbSNemanja Ivanovic
109*67c1c1dbSNemanja Ivanovicreturn:                                           ; preds = %entry, %if.end6, %if.then4, %if.then2
110*67c1c1dbSNemanja Ivanovic  %retval.0 = phi i32 [ %sub, %if.then2 ], [ %add, %if.then4 ], [ %add7, %if.end6 ], [ %a, %entry ]
111*67c1c1dbSNemanja Ivanovic  ret i32 %retval.0
112*67c1c1dbSNemanja Ivanovic}
113*67c1c1dbSNemanja Ivanovic
114*67c1c1dbSNemanja Ivanovicdeclare i32 @llvm.ppc.fixed.addr.ld(i32 immarg) #1
115