brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · ff35c92 Raw
152 lines · cpp
1// RUN: %clang_cc1 -O3 -ffp-contract=fast-honor-pragmas -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s2 3float fp_contract_on_1(float a, float b, float c) {4  // CHECK-LABEL: fp_contract_on_1fff(5  // CHECK: call float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}})6  #pragma STDC FP_CONTRACT ON7  return a * b + c;8}9 10float fp_contract_on_2(float a, float b, float c) {11  // CHECK-LABEL: fp_contract_on_2fff(12  // CHECK: fmul float13  // CHECK: fadd float14  #pragma STDC FP_CONTRACT ON15  float t = a * b;16  return t + c;17}18 19float fp_contract_off_1(float a, float b, float c) {20  // CHECK-LABEL: fp_contract_off_1fff(21  // CHECK: fmul float22  // CHECK: fadd float23  #pragma STDC FP_CONTRACT OFF24  return a * b + c;25}26 27float fp_contract_off_2(float a, float b, float c) {28  // CHECK-LABEL: fp_contract_off_2fff(29  // CHECK: fmul float30  // CHECK: fadd float31  #pragma STDC FP_CONTRACT OFF32  float t = a * b;33  return t + c;34}35 36float fp_contract_default_1(float a, float b, float c) {37  // CHECK-LABEL: fp_contract_default_1fff(38  // CHECK: fmul contract float39  // CHECK: fadd contract float40  #pragma STDC FP_CONTRACT DEFAULT41  return a * b + c;42}43 44float fp_contract_default_2(float a, float b, float c) {45  // CHECK-LABEL: fp_contract_default_2fff(46  // CHECK: fmul contract float47  // CHECK: fadd contract float48  #pragma STDC FP_CONTRACT DEFAULT49  float t = a * b;50  return t + c;51}52 53float fp_contract_clang_on_1(float a, float b, float c) {54  // CHECK-LABEL: fp_contract_clang_on_1fff(55  // CHECK: call float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}})56  #pragma clang fp contract(on)57  return a * b + c;58}59 60float fp_contract_clang_on_2(float a, float b, float c) {61  // CHECK-LABEL: fp_contract_clang_on_2fff(62  // CHECK: fmul float63  // CHECK: fadd float64  #pragma clang fp contract(on)65  float t = a * b;66  return t + c;67}68 69float fp_contract_clang_off_1(float a, float b, float c) {70  // CHECK-LABEL: fp_contract_clang_off_1fff(71  // CHECK: fmul float72  // CHECK: fadd float73  #pragma clang fp contract(off)74  return a * b + c;75}76 77float fp_contract_clang_off_2(float a, float b, float c) {78  // CHECK-LABEL: fp_contract_clang_off_2fff(79  // CHECK: fmul float80  // CHECK: fadd float81  #pragma clang fp contract(off)82  float t = a * b;83  return t + c;84}85 86float fp_contract_clang_fast_1(float a, float b, float c) {87  // CHECK-LABEL: fp_contract_clang_fast_1fff(88  // CHECK: fmul contract float89  // CHECK: fadd contract float90  #pragma clang fp contract(fast)91  return a * b + c;92}93 94float fp_contract_clang_fast_2(float a, float b, float c) {95  // CHECK-LABEL: fp_contract_clang_fast_2fff(96  // CHECK: fmul contract float97  // CHECK: fadd contract float98  #pragma clang fp contract(fast)99  float t = a * b;100  return t + c;101}102 103#pragma STDC FP_CONTRACT ON104 105float fp_contract_global_on_1(float a, float b, float c) {106  // CHECK-LABEL: fp_contract_global_on_1fff(107  // CHECK: call float @llvm.fmuladd.f32(float {{.*}}, float {{.*}}, float {{.*}})108  return a * b + c;109}110 111float fp_contract_global_on_2(float a, float b, float c) {112  // CHECK-LABEL: fp_contract_global_on_2fff(113  // CHECK: fmul float114  // CHECK: fadd float115  float t = a * b;116  return t + c;117}118 119#pragma STDC FP_CONTRACT OFF120 121float fp_contract_global_off_1(float a, float b, float c) {122  // CHECK-LABEL: fp_contract_global_off_1fff(123  // CHECK: fmul float124  // CHECK: fadd float125  return a * b + c;126}127 128float fp_contract_global_off_2(float a, float b, float c) {129  // CHECK-LABEL: fp_contract_global_off_2fff(130  // CHECK: fmul float131  // CHECK: fadd float132  float t = a * b;133  return t + c;134}135 136#pragma STDC FP_CONTRACT DEFAULT137 138float fp_contract_global_default_1(float a, float b, float c) {139  // CHECK-LABEL: fp_contract_global_default_1fff(140  // CHECK: fmul contract float141  // CHECK: fadd contract float142  return a * b + c;143}144 145float fp_contract_global_default_2(float a, float b, float c) {146  // CHECK-LABEL: fp_contract_global_default_2fff(147  // CHECK: fmul contract float148  // CHECK: fadd contract float149  float t = a * b;150  return t + c;151}152