mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
10e2b8e6fb
Summary: llvm.invariant.group.barrier returns pointer that mustalias pointer it takes. It can't be marked with `returned` attribute, because it would be remove easily. The other reason is that only Alias Analysis can know about this, because if any other pass would know it, then the result would be replaced with it's argument, which would be invalid. We can think about returned pointer as something that mustalias, but it doesn't have to be bitwise the same as the argument. Reviewers: dberlin, chandlerc, hfinkel, sanjoy Subscribers: reames, nlewycky, rsmith, anna, amharc Differential Revision: https://reviews.llvm.org/D31585 llvm-svn: 301227
16 lines
498 B
LLVM
16 lines
498 B
LLVM
; RUN: opt -S -gvn < %s | FileCheck %s
|
|
; RUN: opt -S -newgvn < %s | FileCheck %s
|
|
; RUN: opt -S -O3 < %s | FileCheck %s
|
|
|
|
; This test check if optimizer is not proving equality based on mustalias
|
|
; CHECK-LABEL: define void @dontProveEquality(i8* %a)
|
|
define void @dontProveEquality(i8* %a) {
|
|
%b = call i8* @llvm.invariant.group.barrier(i8* %a)
|
|
%r = i1 icmp eq i8* %b, i8* %a
|
|
;CHECK: call void @use(%r)
|
|
call void @use(%r)
|
|
}
|
|
|
|
declare void @use(i1)
|
|
declare i8* @llvm.invariant.group.barrier(i8 *)
|