CodeGen: do not attempt to invalidate virtual registers for zero-sized phis.
authorPeter Collingbourne <peter@pcc.me.uk>
Fri, 19 Dec 2014 20:50:07 +0000 (20:50 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Fri, 19 Dec 2014 20:50:07 +0000 (20:50 +0000)
llvm-svn: 224615

llvm/include/llvm/CodeGen/FunctionLoweringInfo.h
llvm/test/CodeGen/Generic/empty-phi.ll [new file with mode: 0644]

index 1ce099e..06cd12f 100644 (file)
@@ -206,6 +206,9 @@ public:
       return;
 
     unsigned Reg = It->second;
+    if (Reg == 0)
+      return;
+
     LiveOutRegInfo.grow(Reg);
     LiveOutRegInfo[Reg].IsValid = false;
   }
diff --git a/llvm/test/CodeGen/Generic/empty-phi.ll b/llvm/test/CodeGen/Generic/empty-phi.ll
new file mode 100644 (file)
index 0000000..8d5f3b9
--- /dev/null
@@ -0,0 +1,19 @@
+; RUN: llc < %s
+
+define void @f() {
+entry:
+  br label %bb1
+
+bb1:
+  %0 = phi [0 x { i8*, i64, i64 }] [ %load, %bb2 ], [ undef, %entry ]
+  store [0 x { i8*, i64, i64 }] %0, [0 x { i8*, i64, i64 }]* undef, align 8
+  %1 = icmp eq i64 undef, 0
+  br i1 %1, label %bb2, label %bb3
+
+bb2:
+  %load = load [0 x { i8*, i64, i64 }]* undef, align 8
+  br label %bb1
+
+bb3:
+  ret void
+}