[llvm] r289321 - [AVR] Support stores to undefined pointers

Dylan McKay via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 10 02:16:14 PST 2016


Author: dylanmckay
Date: Sat Dec 10 04:16:13 2016
New Revision: 289321

URL: http://llvm.org/viewvc/llvm-project?rev=289321&view=rev
Log:
[AVR] Support stores to undefined pointers

This would previously trigger an assertion error in AVRISelDAGToDAG.

Added:
    llvm/trunk/test/CodeGen/AVR/store-undef.ll
Modified:
    llvm/trunk/lib/Target/AVR/AVRISelDAGToDAG.cpp

Modified: llvm/trunk/lib/Target/AVR/AVRISelDAGToDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AVR/AVRISelDAGToDAG.cpp?rev=289321&r1=289320&r2=289321&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AVR/AVRISelDAGToDAG.cpp (original)
+++ llvm/trunk/lib/Target/AVR/AVRISelDAGToDAG.cpp Sat Dec 10 04:16:13 2016
@@ -328,7 +328,8 @@ template <> bool AVRDAGToDAGISel::select
   SDValue BasePtr = ST->getBasePtr();
 
   // Early exit when the base pointer is a frame index node or a constant.
-  if (isa<FrameIndexSDNode>(BasePtr) || isa<ConstantSDNode>(BasePtr)) {
+  if (isa<FrameIndexSDNode>(BasePtr) || isa<ConstantSDNode>(BasePtr) ||
+      BasePtr.isUndef()) {
     return false;
   }
 

Added: llvm/trunk/test/CodeGen/AVR/store-undef.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AVR/store-undef.ll?rev=289321&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AVR/store-undef.ll (added)
+++ llvm/trunk/test/CodeGen/AVR/store-undef.ll Sat Dec 10 04:16:13 2016
@@ -0,0 +1,13 @@
+; RUN: llc < %s -mattr=avr6 | FileCheck %s
+
+; This test checks that we can successfully lower a store
+; to an undefined pointer.
+
+; CHECK-LABEL: foo
+define void @foo() {
+
+  ; CHECK:      ldi [[SRC:r[0-9]+]], 0
+  ; CHECK-NEXT: st [[PTRREG:X|Y|Z]], [[SRC]]
+  store i8 0, i8* undef, align 4
+  ret void
+}




More information about the llvm-commits mailing list