xref: /llvm-project/llvm/test/Analysis/CostModel/SystemZ/i128-cmp-ext-conv.ll (revision 8424bf207efd89eacf2fe893b67be98d535e1db6)
1*8424bf20SUlrich Weigand; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=z13 | FileCheck %s --check-prefixes=CHECK,Z13
2*8424bf20SUlrich Weigand; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=arch15 | FileCheck %s --check-prefixes=CHECK,ARC15
3964565f4SJonas Paulsson;
4964565f4SJonas Paulsson
5964565f4SJonas Paulssondefine i128 @fun1(i128 %val1, i128 %val2) {
6964565f4SJonas Paulsson; CHECK-LABEL: 'fun1'
7964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %cmp = icmp eq i128 %val1, %val2
8*8424bf20SUlrich Weigand; Z13:   Cost Model: Found an estimated cost of 5 for instruction:   %v128 = sext i1 %cmp to i128
9*8424bf20SUlrich Weigand; ARC15: Cost Model: Found an estimated cost of 0 for instruction:   %v128 = sext i1 %cmp to i128
10964565f4SJonas Paulsson  %cmp = icmp eq i128 %val1, %val2
11964565f4SJonas Paulsson  %v128 = sext i1 %cmp to i128
12964565f4SJonas Paulsson  ret i128 %v128
13964565f4SJonas Paulsson}
14964565f4SJonas Paulsson
15964565f4SJonas Paulssondefine i128 @fun2(i128 %val1, i128 %val2) {
16964565f4SJonas Paulsson; CHECK-LABEL: 'fun2'
17964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %cmp = icmp eq i128 %val1, %val2
18964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 5 for instruction:   %v128 = zext i1 %cmp to i128
19964565f4SJonas Paulsson  %cmp = icmp eq i128 %val1, %val2
20964565f4SJonas Paulsson  %v128 = zext i1 %cmp to i128
21964565f4SJonas Paulsson  ret i128 %v128
22964565f4SJonas Paulsson}
23964565f4SJonas Paulsson
24964565f4SJonas Paulssondefine i128 @fun3(i128 %val1, i128 %val2,
25964565f4SJonas Paulsson                  i128 %val3, i128 %val4) {
26964565f4SJonas Paulsson; CHECK-LABEL: 'fun3'
27964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %cmp = icmp eq i128 %val1, %val2
28964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %add = add i128 %val3, %val4
29*8424bf20SUlrich Weigand; Z13:   Cost Model: Found an estimated cost of 4 for instruction:   %sel = select i1 %cmp, i128 %val3, i128 %add
30*8424bf20SUlrich Weigand; ARC15: Cost Model: Found an estimated cost of 1 for instruction:   %sel = select i1 %cmp, i128 %val3, i128 %add
31964565f4SJonas Paulsson  %cmp = icmp eq i128 %val1, %val2
32964565f4SJonas Paulsson  %add = add i128 %val3, %val4
33964565f4SJonas Paulsson  %sel = select i1 %cmp, i128 %val3, i128 %add
34964565f4SJonas Paulsson  ret i128 %sel
35964565f4SJonas Paulsson}
36964565f4SJonas Paulsson
37*8424bf20SUlrich Weiganddefine i64 @fun3_sel64(i128 %val1, i128 %val2,
38*8424bf20SUlrich Weigand                       i64 %val3, i64 %val4) {
39*8424bf20SUlrich Weigand; CHECK-LABEL: 'fun3_sel64'
40*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %cmp = icmp ugt i128 %val1, %val2
41*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %add = add i64 %val3, %val4
42*8424bf20SUlrich Weigand; Z13:   Cost Model: Found an estimated cost of 4 for instruction:   %sel = select i1 %cmp, i64 %val3, i64 %add
43*8424bf20SUlrich Weigand; ARC15: Cost Model: Found an estimated cost of 1 for instruction:   %sel = select i1 %cmp, i64 %val3, i64 %add
44*8424bf20SUlrich Weigand  %cmp = icmp ugt i128 %val1, %val2
45*8424bf20SUlrich Weigand  %add = add i64 %val3, %val4
46*8424bf20SUlrich Weigand  %sel = select i1 %cmp, i64 %val3, i64 %add
47*8424bf20SUlrich Weigand  ret i64 %sel
48*8424bf20SUlrich Weigand}
49*8424bf20SUlrich Weigand
50*8424bf20SUlrich Weiganddefine i128 @fun3_cmp64(i64 %val1, i64 %val2,
51*8424bf20SUlrich Weigand                        i128 %val3, i128 %val4) {
52*8424bf20SUlrich Weigand; CHECK-LABEL: 'fun3_cmp64'
53*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %cmp = icmp slt i64 %val1, %val2
54*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %add = add i128 %val3, %val4
55*8424bf20SUlrich Weigand; CHECk: Cost Model: Found an estimated cost of 4 for instruction:   %sel = select i1 %cmp, i128 %val3, i128 %add
56*8424bf20SUlrich Weigand  %cmp = icmp slt i64 %val1, %val2
57*8424bf20SUlrich Weigand  %add = add i128 %val3, %val4
58*8424bf20SUlrich Weigand  %sel = select i1 %cmp, i128 %val3, i128 %add
59*8424bf20SUlrich Weigand  ret i128 %sel
60*8424bf20SUlrich Weigand}
61*8424bf20SUlrich Weigand
62964565f4SJonas Paulssondefine i128 @fun4(ptr %src) {
63964565f4SJonas Paulsson; CHECK-LABEL: 'fun4'
64964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction:   %res = sext i64 %v to i128
65964565f4SJonas Paulsson  %v = load i64, ptr %src, align 8
66964565f4SJonas Paulsson  %res = sext i64 %v to i128
67964565f4SJonas Paulsson  ret i128 %res
68964565f4SJonas Paulsson}
69964565f4SJonas Paulsson
70964565f4SJonas Paulssondefine i128 @fun5(i64 %lhs, i64 %rhs) {
71964565f4SJonas Paulsson; CHECK-LABEL: 'fun5'
72964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction:   %res = sext i64 %v to i128
73964565f4SJonas Paulsson  %v = add i64 %lhs, %rhs
74964565f4SJonas Paulsson  %res = sext i64 %v to i128
75964565f4SJonas Paulsson  ret i128 %res
76964565f4SJonas Paulsson}
77964565f4SJonas Paulsson
78964565f4SJonas Paulssondefine i128 @fun6(ptr %src) {
79964565f4SJonas Paulsson; CHECK-LABEL: 'fun6'
80964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction:   %res = zext i64 %v to i128
81964565f4SJonas Paulsson  %v = load i64, ptr %src, align 8
82964565f4SJonas Paulsson  %res = zext i64 %v to i128
83964565f4SJonas Paulsson  ret i128 %res
84964565f4SJonas Paulsson}
85964565f4SJonas Paulsson
86964565f4SJonas Paulssondefine i128 @fun7(i64 %lhs, i64 %rhs) {
87964565f4SJonas Paulsson; CHECK-LABEL: 'fun7'
88964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction:   %res = zext i64 %v to i128
89964565f4SJonas Paulsson  %v = add i64 %lhs, %rhs
90964565f4SJonas Paulsson  %res = zext i64 %v to i128
91964565f4SJonas Paulsson  ret i128 %res
92964565f4SJonas Paulsson}
93964565f4SJonas Paulsson
94964565f4SJonas Paulsson; Truncating store is free.
95964565f4SJonas Paulssondefine void @fun8(i128 %lhs, i128 %rhs, ptr %dst) {
96964565f4SJonas Paulsson; CHECK-LABEL: 'fun8'
97964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 0 for instruction:   %t = trunc i128 %v to i64
98964565f4SJonas Paulsson  %v = add i128 %lhs, %rhs
99964565f4SJonas Paulsson  %t = trunc i128 %v to i64
100964565f4SJonas Paulsson  store i64 %t, ptr %dst, align 8
101964565f4SJonas Paulsson  ret void
102964565f4SJonas Paulsson}
103964565f4SJonas Paulsson
104964565f4SJonas Paulsson; If there is a non-store user, an extraction is needed.
105964565f4SJonas Paulssondefine i64 @fun9(i128 %lhs, i128 %rhs, ptr %dst) {
106964565f4SJonas Paulsson; CHECK-LABEL: 'fun9'
107964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction:   %t = trunc i128 %v to i64
108964565f4SJonas Paulsson  %v = add i128 %lhs, %rhs
109964565f4SJonas Paulsson  %t = trunc i128 %v to i64
110964565f4SJonas Paulsson  store i64 %t, ptr %dst, align 8
111964565f4SJonas Paulsson  ret i64 %t
112964565f4SJonas Paulsson}
113964565f4SJonas Paulsson
114964565f4SJonas Paulsson; Truncation of load is free.
115964565f4SJonas Paulssondefine i64 @fun10(ptr %src) {
116964565f4SJonas Paulsson; CHECK-LABEL: 'fun10'
117964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 0 for instruction:   %t = trunc i128 %v to i64
118964565f4SJonas Paulsson  %v = load i128, ptr %src, align 8
119964565f4SJonas Paulsson  %t = trunc i128 %v to i64
120964565f4SJonas Paulsson  ret i64 %t
121964565f4SJonas Paulsson}
122964565f4SJonas Paulsson
123964565f4SJonas Paulsson; If the load has another user, the truncation becomes an extract.
124964565f4SJonas Paulssondefine i64 @fun11(ptr %src, i128 %val2, ptr %dst) {
125964565f4SJonas Paulsson; CHECK-LABEL: 'fun11'
126964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction:   %t = trunc i128 %v to i64
127964565f4SJonas Paulsson  %v = load i128, ptr %src, align 8
128964565f4SJonas Paulsson  %t = trunc i128 %v to i64
129964565f4SJonas Paulsson  %a = add i128 %v, %val2
130964565f4SJonas Paulsson  store i128 %a, ptr %dst
131964565f4SJonas Paulsson  ret i64 %t
132964565f4SJonas Paulsson}
133964565f4SJonas Paulsson
134964565f4SJonas Paulsson; Trunction with a GPR use typically requires an extraction.
135964565f4SJonas Paulssondefine i64 @fun12(i128 %lhs, i128 %rhs) {
136964565f4SJonas Paulsson; CHECK-LABEL: 'fun12'
137964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction:   %t = trunc i128 %v to i64
138964565f4SJonas Paulsson  %v = add i128 %lhs, %rhs
139964565f4SJonas Paulsson  %t = trunc i128 %v to i64
140964565f4SJonas Paulsson  ret i64 %t
141964565f4SJonas Paulsson}
142964565f4SJonas Paulsson
143964565f4SJonas Paulsson; Fp<->Int conversions require libcalls.
144964565f4SJonas Paulssondefine void @fun13() {
145964565f4SJonas Paulsson; CHECK-LABEL: 'fun13'
146964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v0 = fptosi fp128 undef to i128
147964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v1 = fptosi double undef to i128
148964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v2 = fptosi float undef to i128
149964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v3 = fptoui fp128 undef to i128
150964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v4 = fptoui double undef to i128
151964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v5 = fptoui float undef to i128
152964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v6 = sitofp i128 undef to fp128
153964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v7 = sitofp i128 undef to double
154964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v8 = sitofp i128 undef to float
155964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v9 = uitofp i128 undef to fp128
156964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v10 = uitofp i128 undef to double
157964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction:   %v11 = uitofp i128 undef to float
158964565f4SJonas Paulsson  %v0 = fptosi fp128 undef to i128
159964565f4SJonas Paulsson  %v1 = fptosi double undef to i128
160964565f4SJonas Paulsson  %v2 = fptosi float undef to i128
161964565f4SJonas Paulsson  %v3 = fptoui fp128 undef to i128
162964565f4SJonas Paulsson  %v4 = fptoui double undef to i128
163964565f4SJonas Paulsson  %v5 = fptoui float undef to i128
164964565f4SJonas Paulsson  %v6 = sitofp i128 undef to fp128
165964565f4SJonas Paulsson  %v7 = sitofp i128 undef to double
166964565f4SJonas Paulsson  %v8 = sitofp i128 undef to float
167964565f4SJonas Paulsson  %v9 = uitofp i128 undef to fp128
168964565f4SJonas Paulsson  %v10 = uitofp i128 undef to double
169964565f4SJonas Paulsson  %v11 = uitofp i128 undef to float
170964565f4SJonas Paulsson  ret void
171964565f4SJonas Paulsson}
172