From 58916b5e2c367ae7cd1d6e2b5235656cfcfb28a5 Mon Sep 17 00:00:00 2001
From: noword <noword.forever@gmail.com>
Date: Sat, 4 Mar 2017 10:28:45 +0800
Subject: [PATCH] ARM64(llvm): Disable range checking on instructions with a
 PC-relative offset (b/bl/cbz/cbnz/tbz/tbnz/ldr/ldrsw/prfm)

---
 .../Target/AArch64/AsmParser/AArch64AsmParser.cpp    | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index f96b913..7dbc71b 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -768,9 +768,7 @@ public:
     if (!MCE)
       return true;
     int64_t Val = MCE->getValue();
-    if (Val & 0x3)
-      return false;
-    return (Val >= -(0x2000000 << 2) && Val <= (0x1ffffff << 2));
+    return ((Val & 0x3) == 0);
   }
   bool isPCRelLabel19() const {
     if (!isImm())
@@ -779,9 +777,7 @@ public:
     if (!MCE)
       return true;
     int64_t Val = MCE->getValue();
-    if (Val & 0x3)
-      return false;
-    return (Val >= -(0x40000 << 2) && Val <= (0x3ffff << 2));
+    return ((Val & 0x3) == 0);
   }
   bool isBranchTarget14() const {
     if (!isImm())
@@ -790,9 +786,7 @@ public:
     if (!MCE)
       return true;
     int64_t Val = MCE->getValue();
-    if (Val & 0x3)
-      return false;
-    return (Val >= -(0x2000 << 2) && Val <= (0x1fff << 2));
+    return ((Val & 0x3) == 0);
   }
 
   bool
-- 
GitLab