[Target/ARM] Only enable OptimizeBarrierPass at -O1 and above.
authorDavide Italiano <davide@freebsd.org>
Wed, 20 May 2015 21:40:38 +0000 (21:40 +0000)
committerDavide Italiano <davide@freebsd.org>
Wed, 20 May 2015 21:40:38 +0000 (21:40 +0000)
Ideally this is going to be and LLVM IR pass (shared, among others
with AArch64), but for the time being just enable it if consumers
ask us for optimization and not unconditionally.

Discussed with Tim Northover on IRC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237837 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMTargetMachine.cpp
test/CodeGen/ARM/noopt-dmb-v7.ll [new file with mode: 0644]
test/CodeGen/ARM/optimize-dmbs-v7.ll

index bd29a052c372687690c49144c452699570f7d738..e794fb71af63a7e19778f61aaa058f8558c2117d 100644 (file)
@@ -402,6 +402,9 @@ void ARMPassConfig::addPreEmitPass() {
   if (getARMSubtarget().isThumb2())
     addPass(&UnpackMachineBundlesID);
 
-  addPass(createARMOptimizeBarriersPass());
+  // Don't optimize barriers at -O0.
+  if (getOptLevel() != CodeGenOpt::None)
+    addPass(createARMOptimizeBarriersPass());
+
   addPass(createARMConstantIslandPass());
 }
diff --git a/test/CodeGen/ARM/noopt-dmb-v7.ll b/test/CodeGen/ARM/noopt-dmb-v7.ll
new file mode 100644 (file)
index 0000000..56a29c8
--- /dev/null
@@ -0,0 +1,15 @@
+; Ensure that adjacent duplicated barriers are not removed at -O0.
+; RUN: llc -O0 < %s -mtriple=armv7 -mattr=+db | FileCheck %s
+
+define i32 @t1() {
+entry:
+  fence seq_cst
+  fence seq_cst
+  fence seq_cst
+  ret i32 0
+}
+
+; CHECK: @ BB#0: @ %entry
+; CHECK-NEXT: dmb ish
+; CHECK-NEXT: dmb ish
+; CHECK-NEXT: dmb ish
index 64f5e202d36af4008bcebfcd4e70c915438029e1..34a55aa718a3c72d4b7d3963f30327294725fff6 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=armv7 -mattr=+db | FileCheck %s
+; RUN: llc -O1 < %s -mtriple=armv7 -mattr=+db | FileCheck %s
 
 @x1 = global i32 0, align 4
 @x2 = global i32 0, align 4