[llvm] r284571 - Checking FP function attribute values and adding more build attribute tests.

Sjoerd Meijer via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 19 00:25:06 PDT 2016


Author: sjoerdmeijer
Date: Wed Oct 19 02:25:06 2016
New Revision: 284571

URL: http://llvm.org/viewvc/llvm-project?rev=284571&view=rev
Log:
Checking FP function attribute values and adding more build attribute tests.

This renames the function for checking FP function attribute values and also
adds more build attribute tests (which are in separate files because build
attributes are set per file).

Differential Revision: https://reviews.llvm.org/D25625

Added:
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr0.ll
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr1.ll
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr2.ll
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr3.ll
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr4.ll
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr5.ll
    llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr6.ll
Modified:
    llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp

Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=284571&r1=284570&r2=284571&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Wed Oct 19 02:25:06 2016
@@ -633,17 +633,17 @@ static ARMBuildAttrs::CPUArch getArchFor
     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 there are no functions, or when
+// the particular function attribute is not set to a value.
+static bool checkFunctionsAttributeConsistency(const Module &M, StringRef Attr,
+                                               StringRef Value) {
+  return !any_of(M, [&](const Function &F) {
+    return F.hasFnAttribute(Attr) &&
+           F.getFnAttribute(Attr).getValueAsString() != Value;
+  });
 }
 
-
 void ARMAsmPrinter::emitAttributes() {
   MCTargetStreamer &TS = *OutStreamer->getTargetStreamer();
   ARMTargetStreamer &ATS = static_cast<ARMTargetStreamer &>(TS);
@@ -781,13 +781,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 +823,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);

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr0.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr0.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr0.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr0.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,11 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed
+; as function attributes, which map on to build attributes ABI_FP_exceptions
+; ABI_FP_denormal. In the backend we therefore have a check to see if all
+; functions have consistent function attributes values. This check also returns
+; true when the compilation unit does not have any functions (i.e. the
+; attributes are consistent), which is what we check with this regression test.
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK:  .eabi_attribute 20, 2
+; CHECK:  .eabi_attribute 21, 0

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr1.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr1.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr1.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,18 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed as
+; function attributes, which map on to build attributes ABI_FP_exceptions ABI_FP_denormal.
+; In the backend we have a check to see if all functions have consistent function
+; attributes values. This checks the "default" behaviour when these FP function
+; attributes are not set at all.
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK: .eabi_attribute 20, 2
+; CHECK: .eabi_attribute 21, 0
+
+
+define i32 @foo_no_fn_attr() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+attributes #0 = { minsize norecurse nounwind optsize readnone }

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr2.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr2.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr2.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,18 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed
+; as function attributes, which map on to build attributes ABI_FP_exceptions
+; ABI_FP_denormal. In the backend we therefore have a check to see if all
+; functions have consistent function attributes values.
+; Here we just test correct output for specific values of no trapping math
+; and denormals.
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK: .eabi_attribute 20, 1
+; CHECK: .eabi_attribute 21, 1
+
+define i32 @foo() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+attributes #0 = { minsize norecurse nounwind optsize readnone "no-trapping-math"="false" "denormal-fp-math"="ieee"}

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr3.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr3.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr3.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,17 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed
+; as function attributes, which map on to build attributes ABI_FP_exceptions
+; ABI_FP_denormal. In the backend we therefore have a check to see if all
+; functions have consistent function attributes values.
+; Here we check: no-trapping-math=true
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK: .eabi_attribute 20, 1
+; CHECK: .eabi_attribute 21, 0
+
+define i32 @foo() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+attributes #0 = { minsize norecurse nounwind optsize readnone "no-trapping-math"="true"}

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr4.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr4.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr4.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr4.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,22 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed
+; as function attributes, which map on to build attributes ABI_FP_exceptions
+; ABI_FP_denormal. In the backend we therefore have a check to see if all
+; functions have consistent function attributes values.
+; Here we check: denormal-fp-math=positive-zero
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK: .eabi_attribute 20, 0
+; CHECK: .eabi_attribute 21, 0
+
+define i32 @foo1() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+define i32 @foo2() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+attributes #0 = { minsize norecurse nounwind optsize readnone "denormal-fp-math"="positive-zero"}

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr5.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr5.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr5.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr5.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,22 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed
+; as function attributes, which map on to build attributes ABI_FP_exceptions
+; ABI_FP_denormal. In the backend we therefore have a check to see if all
+; functions have consistent function attributes values.
+; Here we check: denormal-fp-math=preserve-sign
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK: .eabi_attribute 20, 2
+; CHECK: .eabi_attribute 21, 0
+
+define i32 @foo1() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+define i32 @foo2() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+attributes #0 = { minsize norecurse nounwind optsize readnone "denormal-fp-math"="preserve-sign"}

Added: llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr6.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr6.ll?rev=284571&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr6.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/build-attributes-fn-attr6.ll Wed Oct 19 02:25:06 2016
@@ -0,0 +1,23 @@
+; Check FP options -fno-trapping-math and -fdenormal-fp-math. They are passed
+; as function attributes, which map on to build attributes ABI_FP_exceptions
+; ABI_FP_denormal. In the backend we therefore have a check to see if all
+; functions have consistent function attributes values. Here we check two
+; functions have inconsistent values, and that a default is returned. 
+
+; RUN: llc < %s -mtriple=armv7-linux-gnueabi -mcpu=cortex-a15  | FileCheck %s --check-prefix=CHECK
+
+; CHECK: .eabi_attribute 20, 0
+; CHECK: .eabi_attribute 21, 0
+
+define i32 @foo1() local_unnamed_addr #0 {
+entry:
+  ret i32 42
+}
+
+define i32 @foo2() local_unnamed_addr #1 {
+entry:
+  ret i32 42
+}
+
+attributes #0 = { minsize norecurse nounwind optsize readnone "denormal-fp-math"="preserve-sign"}
+attributes #0 = { minsize norecurse nounwind optsize readnone "denormal-fp-math"="positive-zero"}




More information about the llvm-commits mailing list