|
3 | 3 | ! CHECK-LABEL: func @_QPmodulo_testr(
|
4 | 4 | ! CHECK-SAME: %[[arg0:.*]]: !fir.ref<f64>{{.*}}, %[[arg1:.*]]: !fir.ref<f64>{{.*}}, %[[arg2:.*]]: !fir.ref<f64>{{.*}}) {
|
5 | 5 | subroutine modulo_testr(r, a, p)
|
6 |
| - real(8) :: r, a, p |
7 |
| - ! CHECK-DAG: %[[a:.*]] = fir.load %[[arg1]] : !fir.ref<f64> |
8 |
| - ! CHECK-DAG: %[[p:.*]] = fir.load %[[arg2]] : !fir.ref<f64> |
9 |
| - ! CHECK-DAG: %[[rem:.*]] = arith.remf %[[a]], %[[p]] {{.*}}: f64 |
10 |
| - ! CHECK-DAG: %[[zero:.*]] = arith.constant 0.000000e+00 : f64 |
11 |
| - ! CHECK-DAG: %[[remNotZero:.*]] = arith.cmpf une, %[[rem]], %[[zero]] {{.*}} : f64 |
12 |
| - ! CHECK-DAG: %[[aNeg:.*]] = arith.cmpf olt, %[[a]], %[[zero]] {{.*}} : f64 |
13 |
| - ! CHECK-DAG: %[[pNeg:.*]] = arith.cmpf olt, %[[p]], %[[zero]] {{.*}} : f64 |
14 |
| - ! CHECK-DAG: %[[signDifferent:.*]] = arith.xori %[[aNeg]], %[[pNeg]] : i1 |
15 |
| - ! CHECK-DAG: %[[mustAddP:.*]] = arith.andi %[[remNotZero]], %[[signDifferent]] : i1 |
16 |
| - ! CHECK-DAG: %[[remPlusP:.*]] = arith.addf %[[rem]], %[[p]] {{.*}}: f64 |
17 |
| - ! CHECK: %[[res:.*]] = arith.select %[[mustAddP]], %[[remPlusP]], %[[rem]] : f64 |
18 |
| - ! CHECK: fir.store %[[res]] to %[[arg0]] : !fir.ref<f64> |
19 |
| - r = modulo(a, p) |
20 |
| - end subroutine |
21 |
| - |
22 |
| - ! CHECK-LABEL: func @_QPmodulo_testi( |
23 |
| - ! CHECK-SAME: %[[arg0:.*]]: !fir.ref<i64>{{.*}}, %[[arg1:.*]]: !fir.ref<i64>{{.*}}, %[[arg2:.*]]: !fir.ref<i64>{{.*}}) { |
24 |
| - subroutine modulo_testi(r, a, p) |
25 |
| - integer(8) :: r, a, p |
26 |
| - ! CHECK-DAG: %[[a:.*]] = fir.load %[[arg1]] : !fir.ref<i64> |
27 |
| - ! CHECK-DAG: %[[p:.*]] = fir.load %[[arg2]] : !fir.ref<i64> |
28 |
| - ! CHECK-DAG: %[[rem:.*]] = arith.remsi %[[a]], %[[p]] : i64 |
29 |
| - ! CHECK-DAG: %[[argXor:.*]] = arith.xori %[[a]], %[[p]] : i64 |
30 |
| - ! CHECK-DAG: %[[signDifferent:.*]] = arith.cmpi slt, %[[argXor]], %c0{{.*}} : i64 |
31 |
| - ! CHECK-DAG: %[[remNotZero:.*]] = arith.cmpi ne, %[[rem]], %c0{{.*}} : i64 |
32 |
| - ! CHECK-DAG: %[[mustAddP:.*]] = arith.andi %[[remNotZero]], %[[signDifferent]] : i1 |
33 |
| - ! CHECK-DAG: %[[remPlusP:.*]] = arith.addi %[[rem]], %[[p]] : i64 |
34 |
| - ! CHECK: %[[res:.*]] = arith.select %[[mustAddP]], %[[remPlusP]], %[[rem]] : i64 |
35 |
| - ! CHECK: fir.store %[[res]] to %[[arg0]] : !fir.ref<i64> |
36 |
| - r = modulo(a, p) |
37 |
| - end subroutine |
| 6 | + real(8) :: r, a, p |
| 7 | + ! CHECK-DAG: %[[a:.*]] = fir.load %[[arg1]] : !fir.ref<f64> |
| 8 | + ! CHECK-DAG: %[[p:.*]] = fir.load %[[arg2]] : !fir.ref<f64> |
| 9 | + ! CHECK-DAG: %[[rem:.*]] = arith.remf %[[a]], %[[p]] {{.*}}: f64 |
| 10 | + ! CHECK-DAG: %[[zero:.*]] = arith.constant 0.000000e+00 : f64 |
| 11 | + ! CHECK-DAG: %[[remNotZero:.*]] = arith.cmpf une, %[[rem]], %[[zero]] {{.*}} : f64 |
| 12 | + ! CHECK-DAG: %[[aNeg:.*]] = arith.cmpf olt, %[[a]], %[[zero]] {{.*}} : f64 |
| 13 | + ! CHECK-DAG: %[[pNeg:.*]] = arith.cmpf olt, %[[p]], %[[zero]] {{.*}} : f64 |
| 14 | + ! CHECK-DAG: %[[signDifferent:.*]] = arith.xori %[[aNeg]], %[[pNeg]] : i1 |
| 15 | + ! CHECK-DAG: %[[mustAddP:.*]] = arith.andi %[[remNotZero]], %[[signDifferent]] : i1 |
| 16 | + ! CHECK-DAG: %[[remPlusP:.*]] = arith.addf %[[rem]], %[[p]] {{.*}}: f64 |
| 17 | + ! CHECK: %[[res:.*]] = arith.select %[[mustAddP]], %[[remPlusP]], %[[rem]] : f64 |
| 18 | + ! CHECK: fir.store %[[res]] to %[[arg0]] : !fir.ref<f64> |
| 19 | + r = modulo(a, p) |
| 20 | +end subroutine |
38 | 21 |
|
| 22 | +! CHECK-LABEL: func @_QPmodulo_testi( |
| 23 | +! CHECK-SAME: %[[arg0:.*]]: !fir.ref<i64>{{.*}}, %[[arg1:.*]]: !fir.ref<i64>{{.*}}, %[[arg2:.*]]: !fir.ref<i64>{{.*}}) { |
| 24 | +subroutine modulo_testi(r, a, p) |
| 25 | + integer(8) :: r, a, p |
| 26 | + ! CHECK-DAG: %[[a:.*]] = fir.load %[[arg1]] : !fir.ref<i64> |
| 27 | + ! CHECK-DAG: %[[p:.*]] = fir.load %[[arg2]] : !fir.ref<i64> |
| 28 | + ! CHECK-DAG: %[[rem:.*]] = arith.remsi %[[a]], %[[p]] : i64 |
| 29 | + ! CHECK-DAG: %[[argXor:.*]] = arith.xori %[[a]], %[[p]] : i64 |
| 30 | + ! CHECK-DAG: %[[signDifferent:.*]] = arith.cmpi slt, %[[argXor]], %c0{{.*}} : i64 |
| 31 | + ! CHECK-DAG: %[[remNotZero:.*]] = arith.cmpi ne, %[[rem]], %c0{{.*}} : i64 |
| 32 | + ! CHECK-DAG: %[[mustAddP:.*]] = arith.andi %[[remNotZero]], %[[signDifferent]] : i1 |
| 33 | + ! CHECK-DAG: %[[remPlusP:.*]] = arith.addi %[[rem]], %[[p]] : i64 |
| 34 | + ! CHECK: %[[res:.*]] = arith.select %[[mustAddP]], %[[remPlusP]], %[[rem]] : i64 |
| 35 | + ! CHECK: fir.store %[[res]] to %[[arg0]] : !fir.ref<i64> |
| 36 | + r = modulo(a, p) |
| 37 | +end subroutine |
| 38 | + |
| 39 | +! CHECK-LABEL: func @_QPmodulo_testr16( |
| 40 | +! CHECK-SAME: %[[arg0:.*]]: !fir.ref<f128>{{.*}}, %[[arg1:.*]]: !fir.ref<f128>{{.*}}, %[[arg2:.*]]: !fir.ref<f128>{{.*}}) { |
| 41 | +subroutine modulo_testr16(r, a, p) |
| 42 | + real(16) :: r, a, p |
| 43 | + ! CHECK-DAG: %[[a:.*]] = fir.load %[[arg1]] : !fir.ref<f128> |
| 44 | + ! CHECK-DAG: %[[p:.*]] = fir.load %[[arg2]] : !fir.ref<f128> |
| 45 | + ! CHECK-DAG: %[[rem:.*]] = arith.remf %[[a]], %[[p]] {{.*}}: f128 |
| 46 | + ! CHECK-DAG: %[[zero:.*]] = arith.constant 0.000000e+00 : f128 |
| 47 | + ! CHECK-DAG: %[[remNotZero:.*]] = arith.cmpf une, %[[rem]], %[[zero]] {{.*}} : f128 |
| 48 | + ! CHECK-DAG: %[[aNeg:.*]] = arith.cmpf olt, %[[a]], %[[zero]] {{.*}} : f128 |
| 49 | + ! CHECK-DAG: %[[pNeg:.*]] = arith.cmpf olt, %[[p]], %[[zero]] {{.*}} : f128 |
| 50 | + ! CHECK-DAG: %[[signDifferent:.*]] = arith.xori %[[aNeg]], %[[pNeg]] : i1 |
| 51 | + ! CHECK-DAG: %[[mustAddP:.*]] = arith.andi %[[remNotZero]], %[[signDifferent]] : i1 |
| 52 | + ! CHECK-DAG: %[[remPlusP:.*]] = arith.addf %[[rem]], %[[p]] {{.*}}: f128 |
| 53 | + ! CHECK: %[[res:.*]] = arith.select %[[mustAddP]], %[[remPlusP]], %[[rem]] : f128 |
| 54 | + ! CHECK: fir.store %[[res]] to %[[arg0]] : !fir.ref<f128> |
| 55 | + r = modulo(a, p) |
| 56 | +end subroutine |
0 commit comments