summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2015-05-20 21:40:38 +0000
committerDavide Italiano <davide@freebsd.org>2015-05-20 21:40:38 +0000
commit141b2891cb5d8cdaed5da000a737b42af164fade (patch)
tree6821c68ff1d434db2ec1f8d15ee2048c28333ce7
parent2adfa3be0a9369efa326dad643b196f9c84cd57e (diff)
downloadbcm5719-llvm-141b2891cb5d8cdaed5da000a737b42af164fade.tar.gz
bcm5719-llvm-141b2891cb5d8cdaed5da000a737b42af164fade.zip
[Target/ARM] Only enable OptimizeBarrierPass at -O1 and above.
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. llvm-svn: 237837
-rw-r--r--llvm/lib/Target/ARM/ARMTargetMachine.cpp5
-rw-r--r--llvm/test/CodeGen/ARM/noopt-dmb-v7.ll15
-rw-r--r--llvm/test/CodeGen/ARM/optimize-dmbs-v7.ll2
3 files changed, 20 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
index bd29a052c37..e794fb71af6 100644
--- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
@@ -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/llvm/test/CodeGen/ARM/noopt-dmb-v7.ll b/llvm/test/CodeGen/ARM/noopt-dmb-v7.ll
new file mode 100644
index 00000000000..56a29c8a17e
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/noopt-dmb-v7.ll
@@ -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
diff --git a/llvm/test/CodeGen/ARM/optimize-dmbs-v7.ll b/llvm/test/CodeGen/ARM/optimize-dmbs-v7.ll
index 64f5e202d36..34a55aa718a 100644
--- a/llvm/test/CodeGen/ARM/optimize-dmbs-v7.ll
+++ b/llvm/test/CodeGen/ARM/optimize-dmbs-v7.ll
@@ -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
OpenPOWER on IntegriCloud