[PATCH] D13233: Combining invariant.group metadata bugfix

Piotr Padlewski via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 29 10:06:25 PDT 2015


Prazek updated this revision to Diff 35993.

http://reviews.llvm.org/D13233

Files:
  lib/Transforms/Utils/Local.cpp

Index: lib/Transforms/Utils/Local.cpp
===================================================================
--- lib/Transforms/Utils/Local.cpp
+++ lib/Transforms/Utils/Local.cpp
@@ -1424,9 +1424,12 @@
   }
   // Set !invariant.group from J if J has it. If both instructions have it
   // then we will just pick it from J - even when they are different.
+  // Also make sure that K is load or store - f.e. combining bitcast with load
+  // could produce bitcast with invariant.group metadata, which is invalid.
   // FIXME: we should try to preserve both invariant.group md if they are
   // different, but right now instruction can only have one invariant.group.
-  if (auto *JMD = J->getMetadata(LLVMContext::MD_invariant_group))
+  if (auto *JMD = J->getMetadata(LLVMContext::MD_invariant_group) &&
+      (isa<LoadInst>(K) || isa<StoreInst>(K)))
     K->setMetadata(LLVMContext::MD_invariant_group, JMD);
 
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13233.35993.patch
Type: text/x-patch
Size: 911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150929/af7c04ed/attachment.bin>


More information about the llvm-commits mailing list