mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
d939b8436e
To clear assumptions that are potentially invalid after trivialization, we need to walk the use/def chain. Normally, the only way to reach an instruction with an unsized type is via an instruction that has side effects (or otherwise will demand its input bits). That would stop the walk. However, if we have a readnone function that returns an unsized type (e.g., void), we must avoid asking for the demanded bits of the function call's return value. A void-returning readnone function is always dead (and so we can stop walking the use/def chain here), but the check is necessary to avoid asserting. Fixes PR34211. llvm-svn: 311014
19 lines
457 B
LLVM
19 lines
457 B
LLVM
; RUN: opt -S -bdce < %s | FileCheck %s
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
define void @PR34211(i16* %p) {
|
|
; CHECK-LABEL: @PR34211
|
|
%not_demanded_but_not_dead = load volatile i16, i16* %p
|
|
call void @no_side_effects_so_dead(i16 %not_demanded_but_not_dead)
|
|
ret void
|
|
|
|
; CHECK: %not_demanded_but_not_dead = load volatile i16, i16* %p
|
|
; CHECK-NEXT: ret void
|
|
}
|
|
|
|
declare void @no_side_effects_so_dead(i16) #0
|
|
|
|
attributes #0 = { nounwind readnone }
|
|
|