Files
clang-p2996/llvm/test/Transforms/DeadStoreElimination/MSSA/fence-todo.ll
Matt Arsenault 06c192d454 OpaquePtr: Bulk update tests to use typed byval
Upgrade of the IR text tests should be the only thing blocking making
typed byval mandatory. Partially done through regex and partially
manual.
2020-11-20 14:00:46 -05:00

51 lines
1.3 KiB
LLVM

; XFAIL: *
; RUN: opt -S -basic-aa -dse < %s | FileCheck %s
; We DSE stack alloc'ed and byval locations, in the presence of fences.
; Fence does not make an otherwise thread local store visible.
; Right now the DSE in presence of fence is only done in end blocks (with no successors),
; but the same logic applies to other basic blocks as well.
; The store to %addr.i can be removed since it is a byval attribute
define void @test3(i32* byval(i32) %addr.i) {
; CHECK-LABEL: @test3
; CHECK-NOT: store
; CHECK: fence
; CHECK: ret
store i32 5, i32* %addr.i, align 4
fence release
ret void
}
declare void @foo(i8* nocapture %p)
declare noalias i8* @malloc(i32)
; DSE of stores in locations allocated through library calls.
define void @test_nocapture() {
; CHECK-LABEL: @test_nocapture
; CHECK: malloc
; CHECK: foo
; CHECK-NOT: store
; CHECK: fence
%m = call i8* @malloc(i32 24)
call void @foo(i8* %m)
store i8 4, i8* %m
fence release
ret void
}
; This is a full fence, but it does not make a thread local store visible.
; We can DSE the store in presence of the fence.
define void @fence_seq_cst() {
; CHECK-LABEL: @fence_seq_cst
; CHECK-NEXT: fence seq_cst
; CHECK-NEXT: ret void
%P1 = alloca i32
store i32 0, i32* %P1, align 4
fence seq_cst
store i32 4, i32* %P1, align 4
ret void
}