blob: cccff24c504ff808167869c9dea3bb4ca59d4d4b [file] [log] [blame]
Nemanja Ivanovic864c9532017-07-25 17:54:51 +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 Ivanovic864c9532017-07-25 17:54:51 +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 Ivanovic864c9532017-07-25 17:54:51 +00006; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl
7; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
8
9@glob = common local_unnamed_addr global i64 0, align 8
10
11define signext i32 @test_inesll(i64 %a, i64 %b) {
12; CHECK-LABEL: test_inesll:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000013; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000014; CHECK-NEXT: xor r3, r3, r4
15; CHECK-NEXT: addic r4, r3, -1
16; CHECK-NEXT: subfe r3, r4, r3
17; CHECK-NEXT: blr
18entry:
19 %cmp = icmp ne i64 %a, %b
20 %conv = zext i1 %cmp to i32
21 ret i32 %conv
22}
23
24define signext i32 @test_inesll_sext(i64 %a, i64 %b) {
25; CHECK-LABEL: test_inesll_sext:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000026; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000027; CHECK-NEXT: xor r3, r3, r4
28; CHECK-NEXT: subfic r3, r3, 0
29; CHECK-NEXT: subfe r3, r3, r3
30; CHECK-NEXT: blr
31entry:
32 %cmp = icmp ne i64 %a, %b
33 %sub = sext i1 %cmp to i32
34 ret i32 %sub
35}
36
37define signext i32 @test_inesll_z(i64 %a) {
38; CHECK-LABEL: test_inesll_z:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000039; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000040; CHECK-NEXT: addic r4, r3, -1
41; CHECK-NEXT: subfe r3, r4, r3
42; CHECK-NEXT: blr
43entry:
44 %cmp = icmp ne i64 %a, 0
45 %conv = zext i1 %cmp to i32
46 ret i32 %conv
47}
48
49define signext i32 @test_inesll_sext_z(i64 %a) {
50; CHECK-LABEL: test_inesll_sext_z:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000051; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000052; CHECK-NEXT: subfic r3, r3, 0
53; CHECK-NEXT: subfe r3, r3, r3
54; CHECK-NEXT: blr
55entry:
56 %cmp = icmp ne i64 %a, 0
57 %sub = sext i1 %cmp to i32
58 ret i32 %sub
59}
60
61define void @test_inesll_store(i64 %a, i64 %b) {
62; CHECK-LABEL: test_inesll_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000063; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000064; CHECK-NEXT: addis r5, r2, .LC0@toc@ha
65; CHECK-NEXT: xor r3, r3, r4
66; CHECK-NEXT: ld r12, .LC0@toc@l(r5)
67; CHECK-NEXT: addic r5, r3, -1
68; CHECK-NEXT: subfe r3, r5, r3
69; CHECK-NEXT: std r3, 0(r12)
70; CHECK-NEXT: blr
71entry:
72 %cmp = icmp ne i64 %a, %b
73 %conv1 = zext i1 %cmp to i64
74 store i64 %conv1, i64* @glob, align 8
75 ret void
76}
77
78define void @test_inesll_sext_store(i64 %a, i64 %b) {
79; CHECK-LABEL: test_inesll_sext_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000080; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000081; CHECK-NEXT: addis r5, r2, .LC0@toc@ha
82; CHECK-NEXT: xor r3, r3, r4
83; CHECK-NEXT: ld r12, .LC0@toc@l(r5)
84; CHECK-NEXT: subfic r3, r3, 0
85; CHECK-NEXT: subfe r3, r3, r3
86; CHECK-NEXT: std r3, 0(r12)
87; CHECK-NEXT: blr
88entry:
89 %cmp = icmp ne i64 %a, %b
90 %conv1 = sext i1 %cmp to i64
91 store i64 %conv1, i64* @glob, align 8
92 ret void
93}
94
95define void @test_inesll_z_store(i64 %a) {
96; CHECK-LABEL: test_inesll_z_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000097; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +000098; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
99; CHECK-NEXT: addic r5, r3, -1
100; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
101; CHECK-NEXT: subfe r3, r5, r3
102; CHECK-NEXT: std r3, 0(r4)
103; CHECK-NEXT: blr
104entry:
105 %cmp = icmp ne i64 %a, 0
106 %conv1 = zext i1 %cmp to i64
107 store i64 %conv1, i64* @glob, align 8
108 ret void
109}
110
111define void @test_inesll_sext_z_store(i64 %a) {
112; CHECK-LABEL: test_inesll_sext_z_store:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000113; CHECK: # %bb.0: # %entry
Nemanja Ivanovic864c9532017-07-25 17:54:51 +0000114; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
115; CHECK-NEXT: subfic r3, r3, 0
116; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
117; CHECK-NEXT: subfe r3, r3, r3
118; CHECK-NEXT: std r3, 0(r4)
119; CHECK-NEXT: blr
120entry:
121 %cmp = icmp ne i64 %a, 0
122 %conv1 = sext i1 %cmp to i64
123 store i64 %conv1, i64* @glob, align 8
124 ret void
125}