[llvm] r305014 - [Hexagon] Skip mux generation when predicate register is undefined

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 8 13:56:36 PDT 2017


Author: kparzysz
Date: Thu Jun  8 15:56:36 2017
New Revision: 305014

URL: http://llvm.org/viewvc/llvm-project?rev=305014&view=rev
Log:
[Hexagon] Skip mux generation when predicate register is undefined

Added:
    llvm/trunk/test/CodeGen/Hexagon/mux-undef.ll
Modified:
    llvm/trunk/lib/Target/Hexagon/HexagonGenMux.cpp

Modified: llvm/trunk/lib/Target/Hexagon/HexagonGenMux.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonGenMux.cpp?rev=305014&r1=305013&r2=305014&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonGenMux.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonGenMux.cpp Thu Jun  8 15:56:36 2017
@@ -235,8 +235,11 @@ bool HexagonGenMux::genMuxInBlock(Machin
     unsigned DR = MI->getOperand(0).getReg();
     if (isRegPair(DR))
       continue;
+    MachineOperand &PredOp = MI->getOperand(1);
+    if (PredOp.isUndef())
+      continue;
 
-    unsigned PR = MI->getOperand(1).getReg();
+    unsigned PR = PredOp.getReg();
     unsigned Idx = I2X.lookup(MI);
     CondsetMap::iterator F = CM.find(DR);
     bool IfTrue = HII->isPredicatedTrue(Opc);

Added: llvm/trunk/test/CodeGen/Hexagon/mux-undef.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/mux-undef.ll?rev=305014&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/mux-undef.ll (added)
+++ llvm/trunk/test/CodeGen/Hexagon/mux-undef.ll Thu Jun  8 15:56:36 2017
@@ -0,0 +1,27 @@
+; RUN: llc -march=hexagon -verify-machineinstrs < %s | FileCheck %s
+;
+; Make sure this test compiles successfully.
+; CHECK: jumpr r31
+
+target triple = "hexagon--elf"
+
+; Function Attrs: nounwind
+define i32 @fred() #0 {
+b0:
+  call void @foo() #0
+  br label %b1
+
+b1:                                               ; preds = %b0
+  br i1 undef, label %b2, label %b3
+
+b2:                                               ; preds = %b1
+  br label %b3
+
+b3:                                               ; preds = %b2, %b1
+  %v4 = phi i32 [ 1, %b1 ], [ 2, %b2 ]
+  ret i32 %v4
+}
+
+declare void @foo() #0
+
+attributes #0 = { nounwind "target-cpu"="hexagonv60" }




More information about the llvm-commits mailing list