blob: 6fef78c6b0b96aa6d64e8a3a4779b33175c074db [file] [log] [blame]
Nemanja Ivanovic35db4f92017-09-23 12:53:03 +00001; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \
Nemanja Ivanovicdb7e7702017-11-30 13:39:10 +00002; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \
Nemanja Ivanovic35db4f92017-09-23 12:53:03 +00003; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
4; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \
Nemanja Ivanovicdb7e7702017-11-30 13:39:10 +00005; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \
Nemanja Ivanovic35db4f92017-09-23 12:53:03 +00006; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
7
8@glob = common local_unnamed_addr global i32 0, align 4
9
10; Function Attrs: norecurse nounwind readnone
11define signext i32 @test_igtui(i32 zeroext %a, i32 zeroext %b) {
12; CHECK-LABEL: test_igtui:
13; CHECK: sub [[REG:r[0-9]+]], r4, r3
14; CHECK-NEXT: rldicl r3, [[REG]], 1, 63
15; CHECK-NEXT: blr
16entry:
17 %cmp = icmp ugt i32 %a, %b
18 %conv = zext i1 %cmp to i32
19 ret i32 %conv
20}
21
22; Function Attrs: norecurse nounwind readnone
23define signext i32 @test_igtui_sext(i32 zeroext %a, i32 zeroext %b) {
24; CHECK-LABEL: test_igtui_sext:
25; CHECK: sub [[REG:r[0-9]+]], r4, r3
26; CHECK-NEXT: sradi r3, [[REG]], 63
27; CHECK-NEXT: blr
28entry:
29 %cmp = icmp ugt i32 %a, %b
30 %sub = sext i1 %cmp to i32
31 ret i32 %sub
32}
33
34; Function Attrs: norecurse nounwind readnone
35define signext i32 @test_igtui_z(i32 zeroext %a) {
36; CHECK-LABEL: test_igtui_z:
37; CHECK: cntlzw r3, r3
38; CHECK-NEXT: srwi r3, r3, 5
39; CHECK-NEXT: xori r3, r3, 1
40; CHECK-NEXT: blr
41entry:
42 %cmp = icmp ne i32 %a, 0
43 %conv = zext i1 %cmp to i32
44 ret i32 %conv
45}
46
47; Function Attrs: norecurse nounwind readnone
48define signext i32 @test_igtui_sext_z(i32 zeroext %a) {
49; CHECK-LABEL: test_igtui_sext_z:
50; CHECK: cntlzw r3, r3
51; CHECK-NEXT: srwi r3, r3, 5
52; CHECK-NEXT: xori r3, r3, 1
53; CHECK-NEXT: neg r3, r3
54; CHECK-NEXT: blr
55entry:
56 %cmp = icmp ne i32 %a, 0
57 %sub = sext i1 %cmp to i32
58 ret i32 %sub
59}
60
61; Function Attrs: norecurse nounwind
62define void @test_igtui_store(i32 zeroext %a, i32 zeroext %b) {
63; CHECK-LABEL: test_igtui_store:
64; CHECK: sub [[REG:r[0-9]+]], r4, r3
65; CHECK: rldicl {{r[0-9]+}}, [[REG]], 1, 63
66entry:
67 %cmp = icmp ugt i32 %a, %b
68 %conv = zext i1 %cmp to i32
69 store i32 %conv, i32* @glob, align 4
70 ret void
71}
72
73; Function Attrs: norecurse nounwind
74define void @test_igtui_sext_store(i32 zeroext %a, i32 zeroext %b) {
75; CHECK-LABEL: test_igtui_sext_store:
76; CHECK: sub [[REG:r[0-9]+]], r4, r3
77; CHECK: sradi {{r[0-9]+}}, [[REG]], 63
78entry:
79 %cmp = icmp ugt i32 %a, %b
80 %sub = sext i1 %cmp to i32
81 store i32 %sub, i32* @glob, align 4
82 ret void
83}
84
85; Function Attrs: norecurse nounwind
86define void @test_igtui_z_store(i32 zeroext %a) {
87; CHECK-LABEL: test_igtui_z_store:
88; CHECK: cntlzw r3, r3
89; CHECK: srwi r3, r3, 5
90; CHECK: xori r3, r3, 1
91; CHECK: stw r3, 0(r4)
92; CHECK-NEXT: blr
93entry:
94 %cmp = icmp ne i32 %a, 0
95 %conv = zext i1 %cmp to i32
96 store i32 %conv, i32* @glob, align 4
97 ret void
98}
99
100; Function Attrs: norecurse nounwind
101define void @test_igtui_sext_z_store(i32 zeroext %a) {
102; CHECK-LABEL: test_igtui_sext_z_store:
103; CHECK: cntlzw r3, r3
104; CHECK: srwi r3, r3, 5
105; CHECK: xori r3, r3, 1
106; CHECK: neg r3, r3
107; CHECK: stw r3, 0(r4)
108; CHECK-NEXT: blr
109entry:
110 %cmp = icmp ne i32 %a, 0
111 %sub = sext i1 %cmp to i32
112 store i32 %sub, i32* @glob, align 4
113 ret void
114}
115