mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 04:24:00 +00:00
UseListOrder: Visit global values
When predicting use-list order, we visit functions in reverse order followed by `GlobalValue`s and write out use-lists at the first opportunity. In the reader, this will translate to *after* the last use has been added. For this to work, we actually need to descend into `GlobalValue`s. Added a targeted test in `use-list-order.ll` and `RUN` lines to the newly passing tests in `test/Bitcode`. There are two remaining failures in `test/Bitcode`: - blockaddress.ll: I haven't thought through how to model the way block addresses change the order of use-lists (or how to work around it). - metadata-2.ll: There's an old-style `@llvm.used` global array here that I suspect the .ll parser isn't upgrading properly. When it round-trips through bitcode, the .bc reader *does* upgrade it, so the extra variable (`i8* null`) has an extra use, and the shuffle vector doesn't match. I think the fix is to upgrade old-style global arrays (or reject them?) in the .ll parser. This is part of PR5680. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214321 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -17,6 +17,11 @@
|
||||
@var2 = global i3* @target
|
||||
@var3 = global i3* @target
|
||||
|
||||
; Check use-list order for a global when used both by a global and in a
|
||||
; function.
|
||||
@globalAndFunction = global i4 4
|
||||
@globalAndFunctionGlobalUser = global i4* @globalAndFunction
|
||||
|
||||
define i64 @f(i64 %f) {
|
||||
entry:
|
||||
%sum = add i64 %f, 0
|
||||
@ -94,3 +99,9 @@ first:
|
||||
%gotosecond = icmp slt i32 %gh, -9
|
||||
br i1 %gotosecond, label %second, label %exit
|
||||
}
|
||||
|
||||
define i4 @globalAndFunctionFunctionUser() {
|
||||
entry:
|
||||
%local = load i4* @globalAndFunction
|
||||
ret i4 %local
|
||||
}
|
||||
|
Reference in New Issue
Block a user