blob: b875816733581ec9587d61818f9421e6fe414196 [file] [log] [blame]
Nemanja Ivanovice22ebea2017-09-26 20:42:47 +00001; XFAIL: *
Nemanja Ivanovicf894ce32017-09-24 05:48:11 +00002; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \
3; RUN: -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \
4; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \
6; RUN: -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \
7; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
8; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
9@glob = common local_unnamed_addr global i64 0, align 8
10
11define i64 @test_llgesll(i64 %a, i64 %b) {
12; CHECK-LABEL: test_llgesll:
13; CHECK: # BB#0: # %entry
14; CHECK-NEXT: sradi r5, r3, 63
15; CHECK-NEXT: rldicl r6, r4, 1, 63
16; CHECK-NEXT: subfc r3, r4, r3
17; CHECK-NEXT: adde r3, r5, r6
18; CHECK-NEXT: blr
19entry:
20 %cmp = icmp sge i64 %a, %b
21 %conv1 = zext i1 %cmp to i64
22 ret i64 %conv1
23}
24
25define i64 @test_llgesll_sext(i64 %a, i64 %b) {
26; CHECK-LABEL: test_llgesll_sext:
27; CHECK: # BB#0: # %entry
28; CHECK-NEXT: sradi r5, r3, 63
29; CHECK-NEXT: rldicl r6, r4, 1, 63
30; CHECK-NEXT: subfc r3, r4, r3
31; CHECK-NEXT: adde r3, r5, r6
32; CHECK-NEXT: neg r3, r3
33; CHECK-NEXT: blr
34entry:
35 %cmp = icmp sge i64 %a, %b
36 %conv1 = sext i1 %cmp to i64
37 ret i64 %conv1
38}
39
40define i64 @test_llgesll_z(i64 %a) {
41; CHECK-LABEL: test_llgesll_z:
42; CHECK: # BB#0: # %entry
43; CHECK-NEXT: rldicl r3, r3, 1, 63
44; CHECK-NEXT: xori r3, r3, 1
45; CHECK-NEXT: blr
46entry:
47 %cmp = icmp sgt i64 %a, -1
48 %conv1 = zext i1 %cmp to i64
49 ret i64 %conv1
50}
51
52define i64 @test_llgesll_sext_z(i64 %a) {
53; CHECK-LABEL: test_llgesll_sext_z:
54; CHECK: # BB#0: # %entry
55; CHECK-NEXT: sradi r3, r3, 63
56; CHECK-NEXT: not r3, r3
57; CHECK-NEXT: blr
58entry:
59 %cmp = icmp sgt i64 %a, -1
60 %conv1 = sext i1 %cmp to i64
61 ret i64 %conv1
62}
63
64define void @test_llgesll_store(i64 %a, i64 %b) {
65; CHECK-LABEL: test_llgesll_store:
66; CHECK: # BB#0: # %entry
67; CHECK: sradi r6, r3, 63
68; CHECK: subfc r3, r4, r3
69; CHECK: rldicl r3, r4, 1, 63
70; CHECK: adde r3, r6, r3
71; CHECK: std r3,
72; CHECK-NEXT: blr
73entry:
74 %cmp = icmp sge i64 %a, %b
75 %conv1 = zext i1 %cmp to i64
76 store i64 %conv1, i64* @glob, align 8
77 ret void
78}
79
80define void @test_llgesll_sext_store(i64 %a, i64 %b) {
81; CHECK-LABEL: test_llgesll_sext_store:
82; CHECK: # BB#0: # %entry
83; CHECK-NEXT: sradi r6, r3, 63
84; CHECK-NEXT: addis r5, r2, .LC0@toc@ha
85; CHECK-NEXT: subfc r3, r4, r3
86; CHECK-NEXT: rldicl r3, r4, 1, 63
87; CHECK-NEXT: ld r4, .LC0@toc@l(r5)
88; CHECK-NEXT: adde r3, r6, r3
89; CHECK-NEXT: neg r3, r3
90; CHECK-NEXT: std r3, 0(r4)
91; CHECK-NEXT: blr
92entry:
93 %cmp = icmp sge i64 %a, %b
94 %conv1 = sext i1 %cmp to i64
95 store i64 %conv1, i64* @glob, align 8
96 ret void
97}
98
99define void @test_llgesll_z_store(i64 %a) {
100; CHECK-LABEL: test_llgesll_z_store:
101; CHECK: # BB#0: # %entry
102; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
103; CHECK-NEXT: rldicl r3, r3, 1, 63
104; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
105; CHECK-NEXT: xori r3, r3, 1
106; CHECK-NEXT: std r3, 0(r4)
107; CHECK-NEXT: blr
108entry:
109 %cmp = icmp sgt i64 %a, -1
110 %conv1 = zext i1 %cmp to i64
111 store i64 %conv1, i64* @glob, align 8
112 ret void
113}
114
115define void @test_llgesll_sext_z_store(i64 %a) {
116; CHECK-LABEL: test_llgesll_sext_z_store:
117; CHECK: # BB#0: # %entry
118; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
119; CHECK-NEXT: sradi r3, r3, 63
120; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
121; CHECK-NEXT: not r3, r3
122; CHECK-NEXT: std r3, 0(r4)
123; CHECK-NEXT: blr
124entry:
125 %cmp = icmp sgt i64 %a, -1
126 %conv1 = sext i1 %cmp to i64
127 store i64 %conv1, i64* @glob, align 8
128 ret void
129}