Add a flag to disable the ARM64DeadRegisterDefinitionsPass
authorLouis Gerbarg <lgg@apple.com>
Mon, 14 Apr 2014 21:05:02 +0000 (21:05 +0000)
committerLouis Gerbarg <lgg@apple.com>
Mon, 14 Apr 2014 21:05:02 +0000 (21:05 +0000)
This patch adds a -arm64-dead-def-elimination flag so that it is possible to
disable dead definition elimination. Includes test case.

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

lib/Target/ARM64/ARM64TargetMachine.cpp
test/CodeGen/ARM64/arm64-dead-def-elimination-flag.ll [new file with mode: 0644]

index 101dc25839eb4c60312bc986a03d6f9a59ad582e..f4a79963790125f87e9b523ff5b3434f8ce0b871 100644 (file)
@@ -39,6 +39,14 @@ EnableCollectLOH("arm64-collect-loh", cl::Hidden,
                           " optimization hints (LOH)"),
                  cl::init(true));
 
+static cl::opt<bool>
+EnableDeadRegisterElimination("arm64-dead-def-elimination", cl::Hidden,
+                              cl::desc("Enable the pass that removes dead"
+                                       " definitons and replaces stores to"
+                                       " them with stores to the zero"
+                                       " register"),
+                              cl::init(true));
+
 extern "C" void LLVMInitializeARM64Target() {
   // Register the target.
   RegisterTargetMachine<ARM64TargetMachine> X(TheARM64Target);
@@ -135,7 +143,8 @@ bool ARM64PassConfig::addPreRegAlloc() {
 
 bool ARM64PassConfig::addPostRegAlloc() {
   // Change dead register definitions to refer to the zero register.
-  addPass(createARM64DeadRegisterDefinitions());
+  if (EnableDeadRegisterElimination)
+    addPass(createARM64DeadRegisterDefinitions());
   return true;
 }
 
diff --git a/test/CodeGen/ARM64/arm64-dead-def-elimination-flag.ll b/test/CodeGen/ARM64/arm64-dead-def-elimination-flag.ll
new file mode 100644 (file)
index 0000000..babf482
--- /dev/null
@@ -0,0 +1,16 @@
+; RUN: llc -march=arm64 -arm64-dead-def-elimination=false < %s | FileCheck %s
+
+target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
+target triple = "arm64-apple-ios7.0.0"
+
+; Function Attrs: nounwind ssp uwtable
+define i32 @test1() #0 {
+  %tmp1 = alloca i8
+  %tmp2 = icmp eq i8* %tmp1, null
+  %tmp3 = zext i1 %tmp2 to i32
+
+  ret i32 %tmp3
+
+  ; CHECK-LABEL: test1
+  ; CHECK: adds {{x[0-9]+}}, sp, #15
+}