[PATCH] D65118: Analysis: Don't look through aliases when simplifying GEPs.
Peter Collingbourne via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 22 15:15:39 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL366754: Analysis: Don't look through aliases when simplifying GEPs. (authored by pcc, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D65118?vs=211203&id=211211#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D65118/new/
https://reviews.llvm.org/D65118
Files:
llvm/trunk/lib/Analysis/ConstantFolding.cpp
llvm/trunk/test/Analysis/ConstantFolding/gep-alias.ll
Index: llvm/trunk/lib/Analysis/ConstantFolding.cpp
===================================================================
--- llvm/trunk/lib/Analysis/ConstantFolding.cpp
+++ llvm/trunk/lib/Analysis/ConstantFolding.cpp
@@ -784,7 +784,7 @@
Constant* StripPtrCastKeepAS(Constant* Ptr, Type *&ElemTy) {
assert(Ptr->getType()->isPointerTy() && "Not a pointer type");
auto *OldPtrTy = cast<PointerType>(Ptr->getType());
- Ptr = Ptr->stripPointerCasts();
+ Ptr = cast<Constant>(Ptr->stripPointerCastsNoFollowAliases());
auto *NewPtrTy = cast<PointerType>(Ptr->getType());
ElemTy = NewPtrTy->getPointerElementType();
Index: llvm/trunk/test/Analysis/ConstantFolding/gep-alias.ll
===================================================================
--- llvm/trunk/test/Analysis/ConstantFolding/gep-alias.ll
+++ llvm/trunk/test/Analysis/ConstantFolding/gep-alias.ll
@@ -0,0 +1,17 @@
+; RUN: opt -instcombine -S -o - %s | FileCheck %s
+; Test that we don't replace an alias with its aliasee when simplifying GEPs.
+; In this test case the transformation is invalid because it replaces the
+; reference to the symbol "b" (which refers to whichever instance of "b"
+; was chosen by the linker) with a reference to "a" (which refers to the
+; specific instance of "b" in this module).
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at a = internal global [3 x i8*] zeroinitializer
+ at b = linkonce_odr alias [3 x i8*], [3 x i8*]* @a
+
+define i8** @f() {
+ ; CHECK: ret i8** getelementptr ([3 x i8*], [3 x i8*]* @b, i32 0, i32 1)
+ ret i8** getelementptr ([3 x i8*], [3 x i8*]* @b, i32 0, i32 1)
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65118.211211.patch
Type: text/x-patch
Size: 1658 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190722/a8df6228/attachment.bin>
More information about the llvm-commits
mailing list