1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
4 define float @remquo_f32(ptr %quo) {
5 ; CHECK-LABEL: define float @remquo_f32(
6 ; CHECK-SAME: ptr [[QUO:%.*]]) {
7 ; CHECK-NEXT: [[ENTRY:.*:]]
8 ; CHECK-NEXT: store i32 -2, ptr [[QUO]], align 4
9 ; CHECK-NEXT: ret float 1.000000e+00
12 %call = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr %quo)
16 define float @remquo_f32_quo_sign(ptr %quo) {
17 ; CHECK-LABEL: define float @remquo_f32_quo_sign(
18 ; CHECK-SAME: ptr [[QUO:%.*]]) {
19 ; CHECK-NEXT: [[ENTRY:.*:]]
20 ; CHECK-NEXT: store i32 2, ptr [[QUO]], align 4
21 ; CHECK-NEXT: ret float -1.000000e+00
24 %call = call float @remquof(float 5.000000e+00, float 3.000000e+00, ptr %quo)
28 define float @remquo_f32_round(ptr %quo) {
29 ; CHECK-LABEL: define float @remquo_f32_round(
30 ; CHECK-SAME: ptr [[QUO:%.*]]) {
31 ; CHECK-NEXT: [[ENTRY:.*:]]
32 ; CHECK-NEXT: store i32 -6, ptr [[QUO]], align 4
33 ; CHECK-NEXT: ret float 0xBFC9999900000000
36 %call = call float @remquof(float -5.000000e+00, float 0x3FE99999A0000000, ptr %quo)
40 define double @remquo_f64(ptr %quo) {
41 ; CHECK-LABEL: define double @remquo_f64(
42 ; CHECK-SAME: ptr [[QUO:%.*]]) {
43 ; CHECK-NEXT: [[ENTRY:.*:]]
44 ; CHECK-NEXT: store i32 -5, ptr [[QUO]], align 4
45 ; CHECK-NEXT: ret double -0.000000e+00
48 %call = call double @remquo(double -5.000000e+00, double 1.000000e+00, ptr %quo)
54 define float @remquo_f32_inf_x(ptr %quo) {
55 ; CHECK-LABEL: define float @remquo_f32_inf_x(
56 ; CHECK-SAME: ptr [[QUO:%.*]]) {
57 ; CHECK-NEXT: [[ENTRY:.*:]]
58 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float 0x7FF0000000000000, float 1.000000e+00, ptr [[QUO]])
59 ; CHECK-NEXT: ret float [[CALL]]
62 %call = call float @remquof(float 0x7FF0000000000000, float 1.000000e+00, ptr %quo)
66 define float @remquo_f32_zero_y(ptr %quo) {
67 ; CHECK-LABEL: define float @remquo_f32_zero_y(
68 ; CHECK-SAME: ptr [[QUO:%.*]]) {
69 ; CHECK-NEXT: [[ENTRY:.*:]]
70 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr [[QUO]])
71 ; CHECK-NEXT: ret float [[CALL]]
74 %call = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr %quo)
78 define float @remquo_f32_nzero_y(ptr %quo) {
79 ; CHECK-LABEL: define float @remquo_f32_nzero_y(
80 ; CHECK-SAME: ptr [[QUO:%.*]]) {
81 ; CHECK-NEXT: [[ENTRY:.*:]]
82 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float -0.000000e+00, ptr [[QUO]])
83 ; CHECK-NEXT: ret float [[CALL]]
86 %call = call float @remquof(float -5.000000e+00, float -0.000000e+00, ptr %quo)
90 define float @remquo_f32_nan_x(ptr %quo) {
91 ; CHECK-LABEL: define float @remquo_f32_nan_x(
92 ; CHECK-SAME: ptr [[QUO:%.*]]) {
93 ; CHECK-NEXT: [[ENTRY:.*:]]
94 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float 0x7FF8000000000000, float 1.000000e+00, ptr [[QUO]])
95 ; CHECK-NEXT: ret float [[CALL]]
98 %call = call float @remquof(float 0x7FF8000000000000, float 1.000000e+00, ptr %quo)
102 define float @remquo_f32_nan_y(ptr %quo) {
103 ; CHECK-LABEL: define float @remquo_f32_nan_y(
104 ; CHECK-SAME: ptr [[QUO:%.*]]) {
105 ; CHECK-NEXT: [[ENTRY:.*:]]
106 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float 1.000000e+00, float 0x7FF8000000000000, ptr [[QUO]])
107 ; CHECK-NEXT: ret float [[CALL]]
110 %call = call float @remquof(float 1.000000e+00, float 0x7FF8000000000000, ptr %quo)
114 define float @remquo_f32_strictfp(ptr %quo) strictfp {
115 ; CHECK-LABEL: define float @remquo_f32_strictfp(
116 ; CHECK-SAME: ptr [[QUO:%.*]]) #[[ATTR0:[0-9]+]] {
117 ; CHECK-NEXT: [[ENTRY:.*:]]
118 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr [[QUO]]) #[[ATTR0]]
119 ; CHECK-NEXT: ret float [[CALL]]
122 %call = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr %quo) strictfp
126 define float @remquo_f32_zero_y_strictfp(ptr %quo) strictfp {
127 ; CHECK-LABEL: define float @remquo_f32_zero_y_strictfp(
128 ; CHECK-SAME: ptr [[QUO:%.*]]) #[[ATTR0]] {
129 ; CHECK-NEXT: [[ENTRY:.*:]]
130 ; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr [[QUO]]) #[[ATTR0]]
131 ; CHECK-NEXT: ret float [[CALL]]
134 %call = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr %quo) strictfp
138 declare float @remquof(float, float, ptr)
139 declare double @remquo(double, double, ptr)