mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-23 11:49:46 +00:00
[IR] Fix mayReadFromMemory() for writeonly calls
Current implementation of Instruction::mayReadFromMemory() returns !doesNotAccessMemory() which is !ReadNone. This does not take into account that the writeonly attribute also indicates that the call does not read from memory. The patch changes the predicate to !doesNotReadMemory() that reflects the intended behavior. Differential Revision: https://reviews.llvm.org/D69086 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375389 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
adc79ba5db
commit
53fb41197c
@ -524,7 +524,7 @@ bool Instruction::mayReadFromMemory() const {
|
||||
case Instruction::Call:
|
||||
case Instruction::Invoke:
|
||||
case Instruction::CallBr:
|
||||
return !cast<CallBase>(this)->doesNotAccessMemory();
|
||||
return !cast<CallBase>(this)->doesNotReadMemory();
|
||||
case Instruction::Store:
|
||||
return !cast<StoreInst>(this)->isUnordered();
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ define amdgpu_kernel void @gws_init_vgpr_offset_add(i32 %val) #0 {
|
||||
; LOOP: s_mov_b32 m0, -1
|
||||
; LOOP: ds_write_b32
|
||||
define amdgpu_kernel void @gws_init_save_m0_init_constant_offset(i32 %val) #0 {
|
||||
store i32 1, i32 addrspace(3)* @lds
|
||||
store volatile i32 1, i32 addrspace(3)* @lds
|
||||
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 10)
|
||||
store i32 2, i32 addrspace(3)* @lds
|
||||
ret void
|
||||
|
15
test/Transforms/EarlyCSE/writeonly.ll
Normal file
15
test/Transforms/EarlyCSE/writeonly.ll
Normal file
@ -0,0 +1,15 @@
|
||||
; RUN: opt -S -early-cse < %s | FileCheck %s
|
||||
|
||||
@var = global i32 undef
|
||||
declare void @foo() nounwind
|
||||
|
||||
define void @test() {
|
||||
; CHECK-LABEL: @test(
|
||||
; CHECK-NOT: store
|
||||
store i32 1, i32* @var
|
||||
; CHECK: call void @foo()
|
||||
call void @foo() writeonly
|
||||
; CHECK: store i32 2, i32* @var
|
||||
store i32 2, i32* @var
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user