[AArch64][NFC] NFC for const vector as Instruction operand (#116790)
[llvm-project.git] / llvm / test / Transforms / InstCombine / remquo.ll
blobb2499ea13179e514e2b05bb1968a2fdde0758a77
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
11 entry:
12   %call = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr %quo)
13   ret float %call
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
23 entry:
24   %call = call float @remquof(float 5.000000e+00, float 3.000000e+00, ptr %quo)
25   ret float %call
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
35 entry:
36   %call = call float @remquof(float -5.000000e+00, float 0x3FE99999A0000000, ptr %quo)
37   ret float %call
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
47 entry:
48   %call = call double @remquo(double -5.000000e+00, double 1.000000e+00, ptr %quo)
49   ret double %call
52 ; Negative tests
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]]
61 entry:
62   %call = call float @remquof(float 0x7FF0000000000000, float 1.000000e+00, ptr %quo)
63   ret float %call
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]]
73 entry:
74   %call = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr %quo)
75   ret float %call
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]]
85 entry:
86   %call = call float @remquof(float -5.000000e+00, float -0.000000e+00, ptr %quo)
87   ret float %call
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]]
97 entry:
98   %call = call float @remquof(float 0x7FF8000000000000, float 1.000000e+00, ptr %quo)
99   ret float %call
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]]
109 entry:
110   %call = call float @remquof(float 1.000000e+00, float 0x7FF8000000000000, ptr %quo)
111   ret float %call
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]]
121 entry:
122   %call = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr %quo) strictfp
123   ret float %call
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]]
133 entry:
134   %call = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr %quo) strictfp
135   ret float %call
138 declare float @remquof(float, float, ptr)
139 declare double @remquo(double, double, ptr)