1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
1
2
; RUN: opt -passes=instcombine -S < %s | FileCheck %s
2
3
3
4
4
- ;CHECK-LABEL: @src(
5
- ;CHECK: %result = fcmp oge double %0, 1.000000e+02
6
- ;CHECK-NEXT: ret i1 %result
7
- define i1 @src (double %0 ) {
8
- %trunc = fptrunc double %0 to float
9
- %result = fcmp oge float %trunc , 1 .000000e+02
10
- ret i1 %result
11
- }
5
+ define i1 @fcmp_trunc (double %0 ) {
6
+ ; CHECK-LABEL: define i1 @fcmp_trunc(
7
+ ; CHECK-SAME: double [[TMP0:%.*]]) {
8
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 1.000000e+02
9
+ ; CHECK-NEXT: ret i1 [[RESULT]]
10
+ ;
11
+ %trunc = fptrunc double %0 to float
12
+ %result = fcmp oge float %trunc , 1 .000000e+02
13
+ ret i1 %result
14
+ }
15
+
16
+ define i1 @fcmp_trunc_with_nnan (double %0 ) {
17
+ ; CHECK-LABEL: define i1 @fcmp_trunc_with_nnan(
18
+ ; CHECK-SAME: double [[TMP0:%.*]]) {
19
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp nnan oge double [[TMP0]], 1.000000e+02
20
+ ; CHECK-NEXT: ret i1 [[RESULT]]
21
+ ;
22
+ %trunc = fptrunc double %0 to float
23
+ %result = fcmp nnan oge float %trunc , 1 .000000e+02
24
+ ret i1 %result
25
+ }
26
+
27
+ define i1 @fcmp_trunc_with_ninf (double %0 ) {
28
+ ; CHECK-LABEL: define i1 @fcmp_trunc_with_ninf(
29
+ ; CHECK-SAME: double [[TMP0:%.*]]) {
30
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp ninf oge double [[TMP0]], 1.000000e+02
31
+ ; CHECK-NEXT: ret i1 [[RESULT]]
32
+ ;
33
+ %trunc = fptrunc double %0 to float
34
+ %result = fcmp ninf oge float %trunc , 1 .000000e+02
35
+ ret i1 %result
36
+ }
37
+
38
+ define i1 @fcmp_trunc_with_nsz (double %0 ) {
39
+ ; CHECK-LABEL: define i1 @fcmp_trunc_with_nsz(
40
+ ; CHECK-SAME: double [[TMP0:%.*]]) {
41
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp nsz oge double [[TMP0]], 1.000000e+02
42
+ ; CHECK-NEXT: ret i1 [[RESULT]]
43
+ ;
44
+ %trunc = fptrunc double %0 to float
45
+ %result = fcmp nsz oge float %trunc , 1 .000000e+02
46
+ ret i1 %result
47
+ }
48
+
49
+ define i1 @fcmp_trunc_with_reassoc (double %0 ) {
50
+ ; CHECK-LABEL: define i1 @fcmp_trunc_with_reassoc(
51
+ ; CHECK-SAME: double [[TMP0:%.*]]) {
52
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp reassoc oge double [[TMP0]], 1.000000e+02
53
+ ; CHECK-NEXT: ret i1 [[RESULT]]
54
+ ;
55
+ %trunc = fptrunc double %0 to float
56
+ %result = fcmp reassoc oge float %trunc , 1 .000000e+02
57
+ ret i1 %result
58
+ }
59
+
60
+ define i1 @fcmp_trunc_with_fast (double %0 ) {
61
+ ; CHECK-LABEL: define i1 @fcmp_trunc_with_fast(
62
+ ; CHECK-SAME: double [[TMP0:%.*]]) {
63
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge double [[TMP0]], 1.000000e+02
64
+ ; CHECK-NEXT: ret i1 [[RESULT]]
65
+ ;
66
+ %trunc = fptrunc double %0 to float
67
+ %result = fcmp fast oge float %trunc , 1 .000000e+02
68
+ ret i1 %result
69
+ }
70
+
71
+ define <4 x i1 > @fcmp_vec_trunc (<4 x double > %0 ) {
72
+ ; CHECK-LABEL: define <4 x i1> @fcmp_vec_trunc(
73
+ ; CHECK-SAME: <4 x double> [[TMP0:%.*]]) {
74
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp olt <4 x double> [[TMP0]], <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00>
75
+ ; CHECK-NEXT: ret <4 x i1> [[CMP]]
76
+ ;
77
+ %vec = fptrunc <4 x double > %0 to <4 x float >
78
+ %cmp = fcmp olt <4 x float > %vec , <float 1 .0 , float 2 .0 , float 3 .0 , float 4 .0 >
79
+ ret <4 x i1 > %cmp
80
+ }
81
+
82
+ define <4 x i1 > @fcmp_vec_trunc_with_flag (<4 x double > %0 ) {
83
+ ; CHECK-LABEL: define <4 x i1> @fcmp_vec_trunc_with_flag(
84
+ ; CHECK-SAME: <4 x double> [[TMP0:%.*]]) {
85
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp fast olt <4 x double> [[TMP0]], <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00>
86
+ ; CHECK-NEXT: ret <4 x i1> [[CMP]]
87
+ ;
88
+ %vec = fptrunc <4 x double > %0 to <4 x float >
89
+ %cmp = fcmp fast olt <4 x float > %vec , <float 1 .0 , float 2 .0 , float 3 .0 , float 4 .0 >
90
+ ret <4 x i1 > %cmp
91
+ }
92
+
93
+ define i1 @fcmp_trunc_fp128 (fp128 %0 ) {
94
+ ; CHECK-LABEL: define i1 @fcmp_trunc_fp128(
95
+ ; CHECK-SAME: fp128 [[TMP0:%.*]]) {
96
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge fp128 [[TMP0]], 0xL00000000000000004005900000000000
97
+ ; CHECK-NEXT: ret i1 [[RESULT]]
98
+ ;
99
+ %trunc = fptrunc fp128 %0 to float
100
+ %result = fcmp fast oge float %trunc , 1 .000000e+02
101
+ ret i1 %result
102
+ }
103
+
104
+ define i1 @fcmp_trunc_x86_fp80 (x86_fp80 %0 ) {
105
+ ; CHECK-LABEL: define i1 @fcmp_trunc_x86_fp80(
106
+ ; CHECK-SAME: x86_fp80 [[TMP0:%.*]]) {
107
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge x86_fp80 [[TMP0]], 0xK4005C800000000000000
108
+ ; CHECK-NEXT: ret i1 [[RESULT]]
109
+ ;
110
+ %trunc = fptrunc x86_fp80 %0 to float
111
+ %result = fcmp fast oge float %trunc , 1 .000000e+02
112
+ ret i1 %result
113
+ }
114
+
115
+ define i1 @fcmp_trunc_ppc_fp128 (ppc_fp128 %0 ) {
116
+ ; CHECK-LABEL: define i1 @fcmp_trunc_ppc_fp128(
117
+ ; CHECK-SAME: ppc_fp128 [[TMP0:%.*]]) {
118
+ ; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge ppc_fp128 [[TMP0]], 0xM40590000000000000000000000000000
119
+ ; CHECK-NEXT: ret i1 [[RESULT]]
120
+ ;
121
+ %trunc = fptrunc ppc_fp128 %0 to float
122
+ %result = fcmp fast oge float %trunc , 1 .000000e+02
123
+ ret i1 %result
124
+ }
125
+
0 commit comments