diff options
Diffstat (limited to 'llvm/lib/Target/ARM/ARMAsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 836dbc5d985..3fe14094a24 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -633,17 +633,15 @@ static ARMBuildAttrs::CPUArch getArchForCPU(StringRef CPU, return ARMBuildAttrs::v4; } -// Returns true if all functions have the same function attribute value -static bool haveAllFunctionsAttribute(const Module &M, StringRef Attr, - StringRef Value) { - for (auto &F : M) - if (F.getFnAttribute(Attr).getValueAsString() != Value) - return false; - - return true; +// Returns true if all functions have the same function attribute value. +// It also returns true when the module has no functions. +static bool checkFunctionsAttributeConsistency(const Module &M, StringRef Attr, + StringRef Value) { + return !any_of(M, [&](const Function &F) { + return F.getFnAttribute(Attr).getValueAsString() != Value; + }); } - void ARMAsmPrinter::emitAttributes() { MCTargetStreamer &TS = *OutStreamer->getTargetStreamer(); ARMTargetStreamer &ATS = static_cast<ARMTargetStreamer &>(TS); @@ -781,13 +779,15 @@ void ARMAsmPrinter::emitAttributes() { } // Set FP Denormals. - if (haveAllFunctionsAttribute(*MMI->getModule(), "denormal-fp-math", - "preserve-sign") || + if (checkFunctionsAttributeConsistency(*MMI->getModule(), + "denormal-fp-math", + "preserve-sign") || TM.Options.FPDenormalMode == FPDenormal::PreserveSign) ATS.emitAttribute(ARMBuildAttrs::ABI_FP_denormal, ARMBuildAttrs::PreserveFPSign); - else if (haveAllFunctionsAttribute(*MMI->getModule(), "denormal-fp-math", - "positive-zero") || + else if (checkFunctionsAttributeConsistency(*MMI->getModule(), + "denormal-fp-math", + "positive-zero") || TM.Options.FPDenormalMode == FPDenormal::PositiveZero) ATS.emitAttribute(ARMBuildAttrs::ABI_FP_denormal, ARMBuildAttrs::PositiveZero); @@ -821,7 +821,8 @@ void ARMAsmPrinter::emitAttributes() { } // Set FP exceptions and rounding - if (haveAllFunctionsAttribute(*MMI->getModule(), "no-trapping-math", "true") || + if (checkFunctionsAttributeConsistency(*MMI->getModule(), + "no-trapping-math", "true") || TM.Options.NoTrappingFPMath) ATS.emitAttribute(ARMBuildAttrs::ABI_FP_exceptions, ARMBuildAttrs::Not_Allowed); |