mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
b6e7ff238c
This patch does the following things: 1. update SymbolicallyEvaluateGEP so that it bails out if it cannot preserve inrange arribute; 2. update llvm/test/Analysis/ConstantFolding/gep.ll to remove UB in it; 3. remove inaccurate comment above ConstantFoldInstOperandsImpl in llvm/lib/Analysis/ConstantFolding.cpp; 4. add a new regression test that makes sure that no optimizations change an inrange GEP in an unexpected way. Patch by Zhaomo Yang! Differential Revision: https://reviews.llvm.org/D51698 llvm-svn: 341888
19 lines
679 B
LLVM
19 lines
679 B
LLVM
; RUN: opt -O0 -S < %s | FileCheck %s
|
|
; RUN: opt -O1 -S < %s | FileCheck %s
|
|
; RUN: opt -O2 -S < %s | FileCheck %s
|
|
; RUN: opt -O3 -S < %s | FileCheck %s
|
|
; RUN: opt -Os -S < %s | FileCheck %s
|
|
; RUN: opt -Oz -S < %s | FileCheck %s
|
|
|
|
target datalayout = "e-p:64:64"
|
|
|
|
; Make sure that optimizations do not optimize inrange GEP.
|
|
|
|
@vtable = constant { [3 x i8*] } { [3 x i8*] [i8* null, i8* null, i8* null] }
|
|
|
|
define void @foo(i8*** %p) {
|
|
;CHECK: store i8** getelementptr {{.*}} ({ [3 x i8*] }, { [3 x i8*] }* @vtable, i{{.*}} 0, inrange i32 0, i{{.*}} 3), i8*** %p
|
|
store i8** getelementptr ({ [3 x i8*] }, { [3 x i8*] }* @vtable, i32 0, inrange i32 0, i32 3), i8*** %p
|
|
ret void
|
|
}
|