blob: 44f661c3a80d693b4cfc45de24cf0a0c44c58f35 [file] [log] [blame]
Nemanja Ivanovice22ebea2017-09-26 20:42:47 +00001; XFAIL: *
Nemanja Ivanovicbb67f842017-06-07 12:23:41 +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
10@glob = common local_unnamed_addr global i32 0, align 4
11
12define signext i32 @test_ineui(i32 zeroext %a, i32 zeroext %b) {
13; CHECK-LABEL: test_ineui:
14; CHECK: xor r3, r3, r4
15; CHECK-NEXT: cntlzw r3, r3
16; CHECK-NEXT: srwi r3, r3, 5
17; CHECK-NEXT: xori r3, r3, 1
18; CHECK-NEXT: blr
19entry:
20 %cmp = icmp ne i32 %a, %b
21 %conv = zext i1 %cmp to i32
22 ret i32 %conv
23}
24
25define signext i32 @test_ineui_sext(i32 zeroext %a, i32 zeroext %b) {
26; CHECK-LABEL: test_ineui_sext:
27; CHECK: xor r3, r3, r4
28; CHECK-NEXT: cntlzw r3, r3
29; CHECK-NEXT: srwi r3, r3, 5
30; CHECK-NEXT: xori r3, r3, 1
31; CHECK-NEXT: neg r3, r3
32; CHECK-NEXT: blr
33entry:
34 %cmp = icmp ne i32 %a, %b
35 %sub = sext i1 %cmp to i32
36 ret i32 %sub
37}
38
39define signext i32 @test_ineui_z(i32 zeroext %a) {
40; CHECK-LABEL: test_ineui_z:
41; CHECK: cntlzw r3, r3
42; CHECK-NEXT: srwi r3, r3, 5
43; CHECK-NEXT: xori r3, r3, 1
44; CHECK-NEXT: blr
45entry:
46 %cmp = icmp ne i32 %a, 0
47 %conv = zext i1 %cmp to i32
48 ret i32 %conv
49}
50
51define signext i32 @test_ineui_sext_z(i32 zeroext %a) {
52; CHECK-LABEL: test_ineui_sext_z:
53; CHECK: cntlzw r3, r3
54; CHECK-NEXT: srwi r3, r3, 5
55; CHECK-NEXT: xori r3, r3, 1
56; CHECK-NEXT: neg r3, r3
57; CHECK-NEXT: blr
58entry:
59 %cmp = icmp ne i32 %a, 0
60 %sub = sext i1 %cmp to i32
61 ret i32 %sub
62}
63
64define void @test_ineui_store(i32 zeroext %a, i32 zeroext %b) {
65; CHECK-LABEL: test_ineui_store:
66; CHECK: xor r3, r3, r4
67; CHECK: cntlzw r3, r3
68; CHECK: srwi r3, r3, 5
69; CHECK: xori r3, r3, 1
70; CHECK: stw r3, 0(r4)
71; CHECK-NEXT: blr
72entry:
73 %cmp = icmp ne i32 %a, %b
74 %conv = zext i1 %cmp to i32
75 store i32 %conv, i32* @glob, align 4
76 ret void
77}
78
79define void @test_ineui_sext_store(i32 zeroext %a, i32 zeroext %b) {
80; CHECK-LABEL: test_ineui_sext_store:
81; CHECK: xor r3, r3, r4
82; CHECK: cntlzw r3, r3
83; CHECK: srwi r3, r3, 5
84; CHECK: xori r3, r3, 1
85; CHECK: neg r3, r3
86; CHECK: stw r3, 0(r4)
87; CHECK-NEXT: blr
88entry:
89 %cmp = icmp ne i32 %a, %b
90 %sub = sext i1 %cmp to i32
91 store i32 %sub, i32* @glob, align 4
92 ret void
93}
94
95define void @test_ineui_z_store(i32 zeroext %a) {
96; CHECK-LABEL: test_ineui_z_store:
97; CHECK: cntlzw r3, r3
98; CHECK: srwi r3, r3, 5
99; CHECK: xori r3, r3, 1
100; CHECK: stw r3, 0(r4)
101; CHECK-NEXT: blr
102entry:
103 %cmp = icmp ne i32 %a, 0
104 %conv = zext i1 %cmp to i32
105 store i32 %conv, i32* @glob, align 4
106 ret void
107}
108
109define void @test_ineui_sext_z_store(i32 zeroext %a) {
110; CHECK-LABEL: test_ineui_sext_z_store:
111; CHECK: cntlzw r3, r3
112; CHECK: srwi r3, r3, 5
113; CHECK: xori r3, r3, 1
114; CHECK: neg r3, r3
115; CHECK: stw r3, 0(r4)
116; CHECK-NEXT: blr
117entry:
118 %cmp = icmp ne i32 %a, 0
119 %sub = sext i1 %cmp to i32
120 store i32 %sub, i32* @glob, align 4
121 ret void
122}