Raw File
llvm-Yet-another-fix.patch
From e92be5eb5c60dfdeb5d41d81c82f0aca0c1e4aa9 Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Sat, 17 Jun 2017 17:29:53 -0400
Subject: [PATCH] 4.0 fix

---
 lib/CodeGen/CodeGenPrepare.cpp | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/CodeGen/CodeGenPrepare.cpp b/lib/CodeGen/CodeGenPrepare.cpp
index 44d6b3e264c..4177819e989 100644
--- a/lib/CodeGen/CodeGenPrepare.cpp
+++ b/lib/CodeGen/CodeGenPrepare.cpp
@@ -4067,6 +4067,23 @@ bool CodeGenPrepare::optimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
     // non-integral pointers, so in that case bail out now.
     if (DL->isNonIntegralPointerType(Addr->getType()))
       return false;
+    if (AddrMode.BaseReg) {
+      Type *BaseTy = AddrMode.BaseReg->getType();
+      if (BaseTy->isPointerTy() && DL->isNonIntegralPointerType(BaseTy)) {
+        return false;
+      }
+    }
+    if (AddrMode.Scale) {
+      Type *ScaleTy = AddrMode.ScaledReg->getType();
+      if (ScaleTy->isPointerTy() && DL->isNonIntegralPointerType(ScaleTy)) {
+        return false;
+      }
+    }
+    if (AddrMode.BaseGV) {
+      if (DL->isNonIntegralPointerType(AddrMode.BaseGV->getType())) {
+        return false;
+      }
+    }
 
     DEBUG(dbgs() << "CGP: SINKING nonlocal addrmode: " << AddrMode << " for "
                  << *MemoryInst << "\n");
-- 
2.13.1

back to top