1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00
llvm-mirror/test/Bitcode/use-list-order2.ll
Nikita Popov 7ddbe79e6f [AsmWriter] Properly handle uselistorder for global symbols
Currently, AsmWriter will stick uselistorder directives for global
values inside individual functions. This doesn't make a lot of sense,
and interacts badly with D104950, as use list order adjustments will
be performed while still working on a forward reference.

This patch instead always prints uselistorder directives for globals
at the module level. This isn't really compatible with the previously
used implementation approach. Rather than walking through all values
again, use the OrderMap (after stabilizing its order) to go through
all values and compute the use list shuffles for them. Classify them
per-function, or nullptr for globals.

Even independently of D104950, this seems to fix a few
verify-uselistorder failures. Conveniently, there is even a
pre-existing failing test that this fixes.

Differential Revision: https://reviews.llvm.org/D104976
2021-06-28 23:15:32 +02:00

57 lines
1.1 KiB
LLVM

; RUN: verify-uselistorder %s
; Test 1
@g1 = global i8 0
declare void @llvm.donothing() nounwind readnone
define void @f.no_personality1() personality i8 0 {
invoke void @llvm.donothing() to label %normal unwind label %exception
exception:
%cleanup = landingpad i8 cleanup
br label %normal
normal:
ret void
}
; Test 2
@g2 = global i8 -1
@g3 = global i8 -1
define void @f.no_personality2() personality i8 -1 {
invoke void @llvm.donothing() to label %normal unwind label %exception
exception:
%cleanup = landingpad i8 cleanup
br label %normal
normal:
ret void
}
; Test 3
declare void @f1() prefix i32 1
define void @test1() {
%t1 = alloca half ; Implicit i32 1 used here.
%t2 = alloca float
ret void
}
; Test 4
declare void @f2() prefix i32 2
define void @test2(i32* %word) {
%cmpxchg.0 = cmpxchg i32* %word, i32 0, i32 2 monotonic monotonic
%cmpxchg.1 = cmpxchg i32* %word, i32 0, i32 2 acq_rel monotonic
ret void
}
; Test 5
@g4 = global i32 3
@g5 = global i32 3
declare void @test3() prefix i32 3
; Test 6
@g6 = global i32 4
@g7 = global i32 4
declare void @c() prologue i32 4