brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 3895462 Raw
113 lines · plain
1! REQUIRES: flang-supports-f128-math2! REQUIRES: x86-registered-target3! RUN: bbc -target x86_64-unknown-linux-gnu -hlfir=false %s -o - | FileCheck %s4 5! CHECK-LABEL: @_QPadd_test6subroutine add_test(a,b,c)7  complex :: a, b, c8  ! CHECK-NOT: fir.extract_value9  ! CHECK-NOT: fir.insert_value10  ! CHECK: fir.addc {{.*}}: complex11  a = b + c12end subroutine add_test13 14! CHECK-LABEL: @_QPsub_test15subroutine sub_test(a,b,c)16  complex :: a, b, c17  ! CHECK-NOT: fir.extract_value18  ! CHECK-NOT: fir.insert_value19  ! CHECK: fir.subc {{.*}}: complex20  a = b - c21end subroutine sub_test22 23! CHECK-LABEL: @_QPmul_test24subroutine mul_test(a,b,c)25  complex :: a, b, c26  ! CHECK-NOT: fir.extract_value27  ! CHECK-NOT: fir.insert_value28  ! CHECK: fir.mulc {{.*}}: complex29  a = b * c30end subroutine mul_test31 32! CHECK-LABEL: @_QPdiv_test_half33! CHECK-SAME: %[[AREF:.*]]: !fir.ref<complex<f16>> {{.*}}, %[[BREF:.*]]: !fir.ref<complex<f16>> {{.*}}, %[[CREF:.*]]: !fir.ref<complex<f16>> {{.*}})34! CHECK: %[[BVAL:.*]] = fir.load %[[BREF]] : !fir.ref<complex<f16>>35! CHECK: %[[CVAL:.*]] = fir.load %[[CREF]] : !fir.ref<complex<f16>>36! CHECK: %[[AVAL:.*]] = complex.div %[[BVAL]], %[[CVAL]] fastmath<contract> : complex<f16>37! CHECK: fir.store %[[AVAL]] to %[[AREF]] : !fir.ref<complex<f16>>38subroutine div_test_half(a,b,c)39  complex(kind=2) :: a, b, c40  a = b / c41end subroutine div_test_half42 43! CHECK-LABEL: @_QPdiv_test_bfloat44! CHECK-SAME: %[[AREF:.*]]: !fir.ref<complex<bf16>> {{.*}}, %[[BREF:.*]]: !fir.ref<complex<bf16>> {{.*}}, %[[CREF:.*]]: !fir.ref<complex<bf16>> {{.*}})45! CHECK: %[[BVAL:.*]] = fir.load %[[BREF]] : !fir.ref<complex<bf16>>46! CHECK: %[[CVAL:.*]] = fir.load %[[CREF]] : !fir.ref<complex<bf16>>47! CHECK: %[[AVAL:.*]] = complex.div %[[BVAL]], %[[CVAL]] fastmath<contract> : complex<bf16>48! CHECK: fir.store %[[AVAL]] to %[[AREF]] : !fir.ref<complex<bf16>>49subroutine div_test_bfloat(a,b,c)50  complex(kind=3) :: a, b, c51  a = b / c52end subroutine div_test_bfloat53 54! CHECK-LABEL: @_QPdiv_test_single55! CHECK-SAME: %[[AREF:.*]]: !fir.ref<complex<f32>> {{.*}}, %[[BREF:.*]]: !fir.ref<complex<f32>> {{.*}}, %[[CREF:.*]]: !fir.ref<complex<f32>> {{.*}})56! CHECK: %[[BVAL:.*]] = fir.load %[[BREF]] : !fir.ref<complex<f32>>57! CHECK: %[[CVAL:.*]] = fir.load %[[CREF]] : !fir.ref<complex<f32>>58! CHECK: %[[BREAL:.*]] = fir.extract_value %[[BVAL]], [0 : index] : (complex<f32>) -> f3259! CHECK: %[[BIMAG:.*]] = fir.extract_value %[[BVAL]], [1 : index] : (complex<f32>) -> f3260! CHECK: %[[CREAL:.*]] = fir.extract_value %[[CVAL]], [0 : index] : (complex<f32>) -> f3261! CHECK: %[[CIMAG:.*]] = fir.extract_value %[[CVAL]], [1 : index] : (complex<f32>) -> f3262! CHECK: %[[AVAL:.*]] = fir.call @__divsc3(%[[BREAL]], %[[BIMAG]], %[[CREAL]], %[[CIMAG]]) fastmath<contract> : (f32, f32, f32, f32) -> complex<f32>63! CHECK: fir.store %[[AVAL]] to %[[AREF]] : !fir.ref<complex<f32>>64subroutine div_test_single(a,b,c)65  complex(kind=4) :: a, b, c66  a = b / c67end subroutine div_test_single68 69! CHECK-LABEL: @_QPdiv_test_double70! CHECK-SAME: %[[AREF:.*]]: !fir.ref<complex<f64>> {{.*}}, %[[BREF:.*]]: !fir.ref<complex<f64>> {{.*}}, %[[CREF:.*]]: !fir.ref<complex<f64>> {{.*}})71! CHECK: %[[BVAL:.*]] = fir.load %[[BREF]] : !fir.ref<complex<f64>>72! CHECK: %[[CVAL:.*]] = fir.load %[[CREF]] : !fir.ref<complex<f64>>73! CHECK: %[[BREAL:.*]] = fir.extract_value %[[BVAL]], [0 : index] : (complex<f64>) -> f6474! CHECK: %[[BIMAG:.*]] = fir.extract_value %[[BVAL]], [1 : index] : (complex<f64>) -> f6475! CHECK: %[[CREAL:.*]] = fir.extract_value %[[CVAL]], [0 : index] : (complex<f64>) -> f6476! CHECK: %[[CIMAG:.*]] = fir.extract_value %[[CVAL]], [1 : index] : (complex<f64>) -> f6477! CHECK: %[[AVAL:.*]] = fir.call @__divdc3(%[[BREAL]], %[[BIMAG]], %[[CREAL]], %[[CIMAG]]) fastmath<contract> : (f64, f64, f64, f64) -> complex<f64>78! CHECK: fir.store %[[AVAL]] to %[[AREF]] : !fir.ref<complex<f64>>79subroutine div_test_double(a,b,c)80  complex(kind=8) :: a, b, c81  a = b / c82end subroutine div_test_double83 84! CHECK-LABEL: @_QPdiv_test_extended85! CHECK-SAME: %[[AREF:.*]]: !fir.ref<complex<f80>> {{.*}}, %[[BREF:.*]]: !fir.ref<complex<f80>> {{.*}}, %[[CREF:.*]]: !fir.ref<complex<f80>> {{.*}})86! CHECK: %[[BVAL:.*]] = fir.load %[[BREF]] : !fir.ref<complex<f80>>87! CHECK: %[[CVAL:.*]] = fir.load %[[CREF]] : !fir.ref<complex<f80>>88! CHECK: %[[BREAL:.*]] = fir.extract_value %[[BVAL]], [0 : index] : (complex<f80>) -> f8089! CHECK: %[[BIMAG:.*]] = fir.extract_value %[[BVAL]], [1 : index] : (complex<f80>) -> f8090! CHECK: %[[CREAL:.*]] = fir.extract_value %[[CVAL]], [0 : index] : (complex<f80>) -> f8091! CHECK: %[[CIMAG:.*]] = fir.extract_value %[[CVAL]], [1 : index] : (complex<f80>) -> f8092! CHECK: %[[AVAL:.*]] = fir.call @__divxc3(%[[BREAL]], %[[BIMAG]], %[[CREAL]], %[[CIMAG]]) fastmath<contract> : (f80, f80, f80, f80) -> complex<f80>93! CHECK: fir.store %[[AVAL]] to %[[AREF]] : !fir.ref<complex<f80>>94subroutine div_test_extended(a,b,c)95  complex(kind=10) :: a, b, c96  a = b / c97end subroutine div_test_extended98 99! CHECK-LABEL: @_QPdiv_test_quad100! CHECK-SAME: %[[AREF:.*]]: !fir.ref<complex<f128>> {{.*}}, %[[BREF:.*]]: !fir.ref<complex<f128>> {{.*}}, %[[CREF:.*]]: !fir.ref<complex<f128>> {{.*}})101! CHECK: %[[BVAL:.*]] = fir.load %[[BREF]] : !fir.ref<complex<f128>>102! CHECK: %[[CVAL:.*]] = fir.load %[[CREF]] : !fir.ref<complex<f128>>103! CHECK: %[[BREAL:.*]] = fir.extract_value %[[BVAL]], [0 : index] : (complex<f128>) -> f128104! CHECK: %[[BIMAG:.*]] = fir.extract_value %[[BVAL]], [1 : index] : (complex<f128>) -> f128105! CHECK: %[[CREAL:.*]] = fir.extract_value %[[CVAL]], [0 : index] : (complex<f128>) -> f128106! CHECK: %[[CIMAG:.*]] = fir.extract_value %[[CVAL]], [1 : index] : (complex<f128>) -> f128107! CHECK: %[[AVAL:.*]] = fir.call @__divtc3(%[[BREAL]], %[[BIMAG]], %[[CREAL]], %[[CIMAG]]) fastmath<contract> : (f128, f128, f128, f128) -> complex<f128>108! CHECK: fir.store %[[AVAL]] to %[[AREF]] : !fir.ref<complex<f128>>109subroutine div_test_quad(a,b,c)110  complex(kind=16) :: a, b, c111  a = b / c112end subroutine div_test_quad113