blob: 350168e0e6cccf812c1ae434c2ce26ad533b6a33 [file] [log] [blame]
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \
Nemanja Ivanovicdb7e7702017-11-30 13:39:10 +00003; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +00004; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \
Nemanja Ivanovicdb7e7702017-11-30 13:39:10 +00006; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +00007; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
8
9@glob = common local_unnamed_addr global i32 0, align 4
10
11; Function Attrs: norecurse nounwind readnone
12define i64 @test_llequi(i32 zeroext %a, i32 zeroext %b) {
13; CHECK-LABEL: test_llequi:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000014; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000015; CHECK-NEXT: xor r3, r3, r4
16; CHECK-NEXT: cntlzw r3, r3
17; CHECK-NEXT: srwi r3, r3, 5
18; CHECK-NEXT: blr
19entry:
20 %cmp = icmp eq i32 %a, %b
21 %conv1 = zext i1 %cmp to i64
22 ret i64 %conv1
23}
24
25; Function Attrs: norecurse nounwind readnone
26define i64 @test_llequi_sext(i32 zeroext %a, i32 zeroext %b) {
27; CHECK-LABEL: test_llequi_sext:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000028; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000029; CHECK-NEXT: xor r3, r3, r4
30; CHECK-NEXT: cntlzw r3, r3
Nemanja Ivanovicd6f93f52017-09-22 11:50:25 +000031; CHECK-NEXT: srwi r3, r3, 5
32; CHECK-NEXT: neg r3, r3
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000033; CHECK-NEXT: blr
34entry:
35 %cmp = icmp eq i32 %a, %b
36 %conv1 = sext i1 %cmp to i64
37 ret i64 %conv1
38}
39
40; Function Attrs: norecurse nounwind readnone
41define i64 @test_llequi_z(i32 zeroext %a) {
42; CHECK-LABEL: test_llequi_z:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000043; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000044; CHECK-NEXT: cntlzw r3, r3
45; CHECK-NEXT: srwi r3, r3, 5
46; CHECK-NEXT: blr
47entry:
48 %cmp = icmp eq i32 %a, 0
49 %conv1 = zext i1 %cmp to i64
50 ret i64 %conv1
51}
52
53; Function Attrs: norecurse nounwind readnone
54define i64 @test_llequi_sext_z(i32 zeroext %a) {
55; CHECK-LABEL: test_llequi_sext_z:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000056; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000057; CHECK-NEXT: cntlzw r3, r3
Nemanja Ivanovicd6f93f52017-09-22 11:50:25 +000058; CHECK-NEXT: srwi r3, r3, 5
59; CHECK-NEXT: neg r3, r3
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000060; CHECK-NEXT: blr
61entry:
62 %cmp = icmp eq i32 %a, 0
63 %conv1 = sext i1 %cmp to i64
64 ret i64 %conv1
65}
66
67; Function Attrs: norecurse nounwind
68define void @test_llequi_store(i32 zeroext %a, i32 zeroext %b) {
69; CHECK-LABEL: test_llequi_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000070; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000071; CHECK-NEXT: addis r5, r2, .LC0@toc@ha
72; CHECK-NEXT: xor r3, r3, r4
73; CHECK-NEXT: ld r12, .LC0@toc@l(r5)
74; CHECK-NEXT: cntlzw r3, r3
75; CHECK-NEXT: srwi r3, r3, 5
76; CHECK-NEXT: stw r3, 0(r12)
77; CHECK-NEXT: blr
78entry:
79 %cmp = icmp eq i32 %a, %b
80 %conv = zext i1 %cmp to i32
81 store i32 %conv, i32* @glob, align 4
82 ret void
83}
84
85; Function Attrs: norecurse nounwind
86define void @test_llequi_sext_store(i32 zeroext %a, i32 zeroext %b) {
87; CHECK-LABEL: test_llequi_sext_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000088; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000089; CHECK-NEXT: xor r3, r3, r4
90; CHECK-NEXT: addis r5, r2, .LC0@toc@ha
91; CHECK-NEXT: cntlzw r3, r3
92; CHECK-NEXT: ld r4, .LC0@toc@l(r5)
Nemanja Ivanovicd6f93f52017-09-22 11:50:25 +000093; CHECK-NEXT: srwi r3, r3, 5
94; CHECK-NEXT: neg r3, r3
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +000095; CHECK-NEXT: stw r3, 0(r4)
96; CHECK-NEXT: blr
97entry:
98 %cmp = icmp eq i32 %a, %b
99 %sub = sext i1 %cmp to i32
100 store i32 %sub, i32* @glob, align 4
101 ret void
102}
103
104; Function Attrs: norecurse nounwind
105define void @test_llequi_z_store(i32 zeroext %a) {
106; CHECK-LABEL: test_llequi_z_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000107; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +0000108; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
109; CHECK-NEXT: cntlzw r3, r3
110; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
111; CHECK-NEXT: srwi r3, r3, 5
112; CHECK-NEXT: stw r3, 0(r4)
113; CHECK-NEXT: blr
114entry:
115 %cmp = icmp eq i32 %a, 0
116 %conv = zext i1 %cmp to i32
117 store i32 %conv, i32* @glob, align 4
118 ret void
119}
120
121; Function Attrs: norecurse nounwind
122define void @test_llequi_sext_z_store(i32 zeroext %a) {
123; CHECK-LABEL: test_llequi_sext_z_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000124; CHECK: # %bb.0: # %entry
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +0000125; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
126; CHECK-NEXT: cntlzw r3, r3
127; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
Nemanja Ivanovicd6f93f52017-09-22 11:50:25 +0000128; CHECK-NEXT: srwi r3, r3, 5
129; CHECK-NEXT: neg r3, r3
Nemanja Ivanovic96c3d622017-05-11 16:54:23 +0000130; CHECK-NEXT: stw r3, 0(r4)
131; CHECK-NEXT: blr
132entry:
133 %cmp = icmp eq i32 %a, 0
134 %sub = sext i1 %cmp to i32
135 store i32 %sub, i32* @glob, align 4
136 ret void
137}