brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 5516ccb Raw
171 lines · c
1// REQUIRES: x86-registered-target2// UNSUPPORTED: target={{.*}}-zos{{.*}}3// RUN: %clang -S -emit-llvm -fenable-matrix -ffp-model=fast %s -o - \4// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-FAST5 6// RUN: %clang -S -emit-llvm -fenable-matrix -ffp-model=aggressive %s -o - \7// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-AGGRESSIVE8 9// RUN: %clang -S -emit-llvm -fenable-matrix -ffp-model=precise %s -o - \10// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-PRECISE11 12// RUN: %clang -S -emit-llvm -fenable-matrix -ffp-model=strict %s -o - \13// RUN: -target x86_64 | FileCheck %s --check-prefixes=CHECK,CHECK-STRICT14 15// RUN: %clang -S -emit-llvm -fenable-matrix -ffp-model=strict -ffast-math \16// RUN: -target x86_64 %s -o - | FileCheck %s \17// RUN: --check-prefixes CHECK,CHECK-STRICT-FAST18 19// RUN: %clang -S -emit-llvm -fenable-matrix -ffp-model=precise -ffast-math \20// RUN: %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-FAST121 22float mymuladd(float x, float y, float z) {23  // CHECK: define{{.*}} float @mymuladd24  return x * y + z;25 26  // CHECK-AGGRESSIVE: fmul fast float27  // CHECK-AGGRESSIVE: load float, ptr28  // CHECK-AGGRESSIVE: fadd fast float29 30  // CHECK-FAST: fmul reassoc nsz arcp contract afn float31  // CHECK-FAST: load float, ptr32  // CHECK-FAST: fadd reassoc nsz arcp contract afn float33 34  // CHECK-PRECISE: load float, ptr35  // CHECK-PRECISE: load float, ptr36  // CHECK-PRECISE: load float, ptr37  // CHECK-PRECISE: call float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}})38 39  // CHECK-STRICT: load float, ptr40  // CHECK-STRICT: load float, ptr41  // CHECK-STRICT: call float @llvm.experimental.constrained.fmul.f32(float {{.*}}, float {{.*}}, {{.*}})42  // CHECK-STRICT: load float, ptr43  // CHECK-STRICT: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, {{.*}})44 45  // CHECK-STRICT-FAST: load float, ptr46  // CHECK-STRICT-FAST: load float, ptr47  // CHECK-STRICT-FAST: fmul fast float {{.*}}, {{.*}}48  // CHECK-STRICT-FAST: load float, ptr49  // CHECK-STRICT-FAST: fadd fast float {{.*}}, {{.*}}50 51  // CHECK-FAST1: load float, ptr52  // CHECK-FAST1: load float, ptr53  // CHECK-FAST1: fmul fast float {{.*}}, {{.*}}54  // CHECK-FAST1: load float, ptr {{.*}}55  // CHECK-FAST1: fadd fast float {{.*}}, {{.*}}56}57 58typedef float __attribute__((ext_vector_type(2))) v2f;59 60void my_vec_muladd(v2f x, float y, v2f z, v2f *res) {61  // CHECK: define{{.*}}@my_vec_muladd62  *res = x * y + z;63 64  // CHECK-AGGRESSIVE: fmul fast <2 x float>65  // CHECK-AGGRESSIVE: load <2 x float>, ptr66  // CHECK-AGGRESSIVE: fadd fast <2 x float>67 68  // CHECK-FAST: fmul reassoc nsz arcp contract afn <2 x float>69  // CHECK-FAST: load <2 x float>, ptr70  // CHECK-FAST: fadd reassoc nsz arcp contract afn <2 x float>71 72  // CHECK-PRECISE: load <2 x float>, ptr73  // CHECK-PRECISE: load float, ptr74  // CHECK-PRECISE: load <2 x float>, ptr75  // CHECK-PRECISE: call <2 x float> @llvm.fmuladd.v2f32(<2 x float> {{.*}}, <2 x float> {{.*}}, <2 x float> {{.*}})76 77  // CHECK-STRICT: load <2 x float>, ptr78  // CHECK-STRICT: load float, ptr79  // CHECK-STRICT: call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> {{.*}}, <2 x float> {{.*}}, {{.*}})80  // CHECK-STRICT: load <2 x float>, ptr81  // CHECK-STRICT: call <2 x float> @llvm.experimental.constrained.fadd.v2f32(<2 x float> {{.*}}, <2 x float> {{.*}}, {{.*}})82 83  // CHECK-STRICT-FAST: load <2 x float>, ptr84  // CHECK-STRICT-FAST: load float, ptr85  // CHECK-STRICT-FAST: fmul fast <2 x float> {{.*}}, {{.*}}86  // CHECK-STRICT-FAST: load <2 x float>, ptr87  // CHECK-STRICT-FAST: fadd fast <2 x float> {{.*}}, {{.*}}88 89  // CHECK-FAST1: load <2 x float>, ptr90  // CHECK-FAST1: load float, ptr91  // CHECK-FAST1: fmul fast <2 x float> {{.*}}, {{.*}}92  // CHECK-FAST1: load <2 x float>, ptr {{.*}}93  // CHECK-FAST1: fadd fast <2 x float> {{.*}}, {{.*}}94}95 96typedef float __attribute__((matrix_type(2, 1))) m21f;97 98void my_m21_muladd(m21f x, float y, m21f z, m21f *res) {99  // CHECK: define{{.*}}@my_m21_muladd100  *res = x * y + z;101 102  // CHECK-AGGRESSIVE: fmul fast <2 x float>103  // CHECK-AGGRESSIVE: load <2 x float>, ptr104  // CHECK-AGGRESSIVE: fadd fast <2 x float>105 106  // CHECK-FAST: fmul reassoc nsz arcp contract afn <2 x float>107  // CHECK-FAST: load <2 x float>, ptr108  // CHECK-FAST: fadd reassoc nsz arcp contract afn <2 x float>109 110  // CHECK-PRECISE: load <2 x float>, ptr111  // CHECK-PRECISE: load float, ptr112  // CHECK-PRECISE: load <2 x float>, ptr113  // CHECK-PRECISE: call <2 x float> @llvm.fmuladd.v2f32(<2 x float> {{.*}}, <2 x float> {{.*}}, <2 x float> {{.*}})114 115  // CHECK-STRICT: load <2 x float>, ptr116  // CHECK-STRICT: load float, ptr117  // CHECK-STRICT: call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> {{.*}}, <2 x float> {{.*}}, {{.*}})118  // CHECK-STRICT: load <2 x float>, ptr119  // CHECK-STRICT: call <2 x float> @llvm.experimental.constrained.fadd.v2f32(<2 x float> {{.*}}, <2 x float> {{.*}}, {{.*}})120 121  // CHECK-STRICT-FAST: load <2 x float>, ptr122  // CHECK-STRICT-FAST: load float, ptr123  // CHECK-STRICT-FAST: fmul fast <2 x float> {{.*}}, {{.*}}124  // CHECK-STRICT-FAST: load <2 x float>, ptr125  // CHECK-STRICT-FAST: fadd fast <2 x float> {{.*}}, {{.*}}126 127  // CHECK-FAST1: load <2 x float>, ptr128  // CHECK-FAST1: load float, ptr129  // CHECK-FAST1: fmul fast <2 x float> {{.*}}, {{.*}}130  // CHECK-FAST1: load <2 x float>, ptr {{.*}}131  // CHECK-FAST1: fadd fast <2 x float> {{.*}}, {{.*}}132}133 134typedef float __attribute__((matrix_type(2, 2))) m22f;135 136void my_m22_muladd(m22f x, float y, m22f z, m22f *res) {137  // CHECK: define{{.*}}@my_m22_muladd138  *res = x * y + z;139 140  // CHECK-AGGRESSIVE: fmul fast <4 x float>141  // CHECK-AGGRESSIVE: load <4 x float>, ptr142  // CHECK-AGGRESSIVE: fadd fast <4 x float>143 144  // CHECK-FAST: fmul reassoc nsz arcp contract afn <4 x float>145  // CHECK-FAST: load <4 x float>, ptr146  // CHECK-FAST: fadd reassoc nsz arcp contract afn <4 x float>147 148  // CHECK-PRECISE: load <4 x float>, ptr149  // CHECK-PRECISE: load float, ptr150  // CHECK-PRECISE: load <4 x float>, ptr151  // CHECK-PRECISE: call <4 x float> @llvm.fmuladd.v4f32(<4 x float> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}})152 153  // CHECK-STRICT: load <4 x float>, ptr154  // CHECK-STRICT: load float, ptr155  // CHECK-STRICT: call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> {{.*}}, <4 x float> {{.*}}, {{.*}})156  // CHECK-STRICT: load <4 x float>, ptr157  // CHECK-STRICT: call <4 x float> @llvm.experimental.constrained.fadd.v4f32(<4 x float> {{.*}}, <4 x float> {{.*}}, {{.*}})158 159  // CHECK-STRICT-FAST: load <4 x float>, ptr160  // CHECK-STRICT-FAST: load float, ptr161  // CHECK-STRICT-FAST: fmul fast <4 x float> {{.*}}, {{.*}}162  // CHECK-STRICT-FAST: load <4 x float>, ptr163  // CHECK-STRICT-FAST: fadd fast <4 x float> {{.*}}, {{.*}}164 165  // CHECK-FAST1: load <4 x float>, ptr166  // CHECK-FAST1: load float, ptr167  // CHECK-FAST1: fmul fast <4 x float> {{.*}}, {{.*}}168  // CHECK-FAST1: load <4 x float>, ptr {{.*}}169  // CHECK-FAST1: fadd fast <4 x float> {{.*}}, {{.*}}170}171