[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / AggressiveInstCombine / trunc_select.ll
blobfb147821889db061c02509206985687d1992bc14
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=aggressive-instcombine -S | FileCheck %s
4 target datalayout = "e-m:m-p1:64:64:64-p:32:32:32-n8:16:32"
6 define dso_local i16 @select_i16(i16 %a, i16 %b, i1 %cond) {
7 ; CHECK-LABEL: @select_i16(
8 ; CHECK-NEXT:  entry:
9 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[A:%.*]], i16 [[B:%.*]]
10 ; CHECK-NEXT:    ret i16 [[SEL]]
12 entry:
13   %conv0 = sext i16 %a to i32
14   %conv1 = sext i16 %b to i32
15   %sel = select i1 %cond, i32 %conv0, i32 %conv1
16   %conv4 = trunc i32 %sel to i16
17   ret i16 %conv4
20 define dso_local i8 @select_i8(i8 %a, i8 %b, i1 %cond) {
21 ; CHECK-LABEL: @select_i8(
22 ; CHECK-NEXT:  entry:
23 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i8 [[A:%.*]], i8 [[B:%.*]]
24 ; CHECK-NEXT:    ret i8 [[SEL]]
26 entry:
27   %conv0 = sext i8 %a to i32
28   %conv1 = sext i8 %b to i32
29   %sel = select i1 %cond, i32 %conv0, i32 %conv1
30   %conv4 = trunc i32 %sel to i8
31   ret i8 %conv4
34 define dso_local i16 @select_i8Ops_trunc_i16(i8 %a, i8 %b, i1 %cond) {
35 ; CHECK-LABEL: @select_i8Ops_trunc_i16(
36 ; CHECK-NEXT:  entry:
37 ; CHECK-NEXT:    [[CONV0:%.*]] = sext i8 [[A:%.*]] to i16
38 ; CHECK-NEXT:    [[CONV1:%.*]] = sext i8 [[B:%.*]] to i16
39 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[CONV0]], i16 [[CONV1]]
40 ; CHECK-NEXT:    ret i16 [[SEL]]
42 entry:
43   %conv0 = sext i8 %a to i32
44   %conv1 = sext i8 %b to i32
45   %sel = select i1 %cond, i32 %conv0, i32 %conv1
46   %conv4 = trunc i32 %sel to i16
47   ret i16 %conv4
51 define dso_local i16 @select_i16_const(i16 %a, i1 %cond) {
52 ; CHECK-LABEL: @select_i16_const(
53 ; CHECK-NEXT:  entry:
54 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i16 109, i16 [[A:%.*]]
55 ; CHECK-NEXT:    ret i16 [[SEL]]
57 entry:
58   %conv = sext i16 %a to i32
59   %sel = select i1 %cond, i32 109, i32 %conv
60   %conv4 = trunc i32 %sel to i16
61   ret i16 %conv4
64 ; 3080196 = 0x2f0004
65 define dso_local i16 @select_i16_bigConst(i16 %a, i1 %cond) {
66 ; CHECK-LABEL: @select_i16_bigConst(
67 ; CHECK-NEXT:  entry:
68 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i16 4, i16 [[A:%.*]]
69 ; CHECK-NEXT:    ret i16 [[SEL]]
71 entry:
72   %conv = sext i16 %a to i32
73   %sel = select i1 %cond, i32 3080196, i32 %conv
74   %conv4 = trunc i32 %sel to i16
75   ret i16 %conv4
78 define dso_local i8 @select_i8_const(i8 %a, i1 %cond) {
79 ; CHECK-LABEL: @select_i8_const(
80 ; CHECK-NEXT:  entry:
81 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i8 109, i8 [[A:%.*]]
82 ; CHECK-NEXT:    ret i8 [[SEL]]
84 entry:
85   %conv = sext i8 %a to i32
86   %sel = select i1 %cond, i32 109, i32 %conv
87   %conv4 = trunc i32 %sel to i8
88   ret i8 %conv4
91 ; 20228 = 0x4f02
92 define dso_local i8 @select_i8_bigConst(i8 %a, i1 %cond) {
93 ; CHECK-LABEL: @select_i8_bigConst(
94 ; CHECK-NEXT:  entry:
95 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i8 4, i8 [[A:%.*]]
96 ; CHECK-NEXT:    ret i8 [[SEL]]
98 entry:
99   %conv = sext i8 %a to i32
100   %sel = select i1 %cond, i32 20228, i32 %conv
101   %conv4 = trunc i32 %sel to i8
102   ret i8 %conv4
105 define dso_local i16 @select_sext(i8 %a, i1 %cond) {
106 ; CHECK-LABEL: @select_sext(
107 ; CHECK-NEXT:  entry:
108 ; CHECK-NEXT:    [[CONV:%.*]] = sext i8 [[A:%.*]] to i16
109 ; CHECK-NEXT:    [[SUB:%.*]] = sub i16 0, [[CONV]]
110 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[SUB]], i16 [[CONV]]
111 ; CHECK-NEXT:    ret i16 [[SEL]]
113 entry:
114   %conv = sext i8 %a to i32
115   %sub = sub nsw i32 0, %conv
116   %sel = select i1 %cond, i32 %sub, i32 %conv
117   %conv4 = trunc i32 %sel to i16
118   ret i16 %conv4
121 define dso_local i16 @select_zext(i8 %a, i1 %cond) {
122 ; CHECK-LABEL: @select_zext(
123 ; CHECK-NEXT:  entry:
124 ; CHECK-NEXT:    [[CONV:%.*]] = zext i8 [[A:%.*]] to i16
125 ; CHECK-NEXT:    [[SUB:%.*]] = sub i16 0, [[CONV]]
126 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[SUB]], i16 [[CONV]]
127 ; CHECK-NEXT:    ret i16 [[SEL]]
129 entry:
130   %conv = zext i8 %a to i32
131   %sub = sub nsw i32 0, %conv
132   %sel = select i1 %cond, i32 %sub, i32 %conv
133   %conv4 = trunc i32 %sel to i16
134   ret i16 %conv4