xref: /llvm-project/llvm/test/Bitcode/use-list-order.ll (revision 2f40830ddebea58a5b6dcf31fae32651e4bddc8f)
1c8eccd11SDuncan P. N. Exon Smith; RUN: verify-uselistorder < %s
26b6fdc99SDuncan P. N. Exon Smith
36b6fdc99SDuncan P. N. Exon Smith@a = global [4 x i1] [i1 0, i1 1, i1 0, i1 1]
4*2f40830dSDavid Blaikie@b = alias i1, getelementptr ([4 x i1], [4 x i1]* @a, i64 0, i64 2)
56b6fdc99SDuncan P. N. Exon Smith
63cbca205SDuncan P. N. Exon Smith; Check use-list order of constants used by globals.
73cbca205SDuncan P. N. Exon Smith@glob1 = global i5 7
83cbca205SDuncan P. N. Exon Smith@glob2 = global i5 7
93cbca205SDuncan P. N. Exon Smith@glob3 = global i5 7
103cbca205SDuncan P. N. Exon Smith
113cbca205SDuncan P. N. Exon Smith; Check use-list order between variables and aliases.
123cbca205SDuncan P. N. Exon Smith@target = global i3 zeroinitializer
13*2f40830dSDavid Blaikie@alias1 = alias i3, i3* @target
14*2f40830dSDavid Blaikie@alias2 = alias i3, i3* @target
15*2f40830dSDavid Blaikie@alias3 = alias i3, i3* @target
163cbca205SDuncan P. N. Exon Smith@var1 = global i3* @target
173cbca205SDuncan P. N. Exon Smith@var2 = global i3* @target
183cbca205SDuncan P. N. Exon Smith@var3 = global i3* @target
193cbca205SDuncan P. N. Exon Smith
20c69b5160SDuncan P. N. Exon Smith; Check use-list order for a global when used both by a global and in a
21c69b5160SDuncan P. N. Exon Smith; function.
22c69b5160SDuncan P. N. Exon Smith@globalAndFunction = global i4 4
23c69b5160SDuncan P. N. Exon Smith@globalAndFunctionGlobalUser = global i4* @globalAndFunction
24c69b5160SDuncan P. N. Exon Smith
259177867bSDuncan P. N. Exon Smith; Check use-list order for constants used by globals that are themselves used
269177867bSDuncan P. N. Exon Smith; as aliases.  This confirms that this globals are recognized as GlobalValues
279177867bSDuncan P. N. Exon Smith; (not general constants).
289177867bSDuncan P. N. Exon Smith@const.global = global i63 0
299177867bSDuncan P. N. Exon Smith@const.global.ptr = global i63* @const.global
309177867bSDuncan P. N. Exon Smith@const.global.2 = global i63 0
319177867bSDuncan P. N. Exon Smith
329177867bSDuncan P. N. Exon Smith; Same as above, but for aliases.
339177867bSDuncan P. N. Exon Smith@const.target = global i62 1
34*2f40830dSDavid Blaikie@const.alias = alias i62, i62* @const.target
35*2f40830dSDavid Blaikie@const.alias.ptr = alias i62, i62* @const.alias
36*2f40830dSDavid Blaikie@const.alias.2 = alias i62, i62* @const.target
379177867bSDuncan P. N. Exon Smith
386b6fdc99SDuncan P. N. Exon Smithdefine i64 @f(i64 %f) {
396b6fdc99SDuncan P. N. Exon Smithentry:
406b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %f, 0
416b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
426b6fdc99SDuncan P. N. Exon Smith}
436b6fdc99SDuncan P. N. Exon Smith
446b6fdc99SDuncan P. N. Exon Smithdefine i64 @g(i64 %g) {
456b6fdc99SDuncan P. N. Exon Smithentry:
466b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %g, 0
476b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
486b6fdc99SDuncan P. N. Exon Smith}
496b6fdc99SDuncan P. N. Exon Smith
506b6fdc99SDuncan P. N. Exon Smithdefine i64 @h(i64 %h) {
516b6fdc99SDuncan P. N. Exon Smithentry:
526b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %h, 0
536b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
546b6fdc99SDuncan P. N. Exon Smith}
556b6fdc99SDuncan P. N. Exon Smith
566b6fdc99SDuncan P. N. Exon Smithdefine i64 @i(i64 %i) {
576b6fdc99SDuncan P. N. Exon Smithentry:
586b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %i, 1
596b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
606b6fdc99SDuncan P. N. Exon Smith}
616b6fdc99SDuncan P. N. Exon Smith
626b6fdc99SDuncan P. N. Exon Smithdefine i64 @j(i64 %j) {
636b6fdc99SDuncan P. N. Exon Smithentry:
646b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %j, 1
656b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
666b6fdc99SDuncan P. N. Exon Smith}
676b6fdc99SDuncan P. N. Exon Smith
686b6fdc99SDuncan P. N. Exon Smithdefine i64 @k(i64 %k) {
696b6fdc99SDuncan P. N. Exon Smithentry:
706b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %k, 1
716b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
726b6fdc99SDuncan P. N. Exon Smith}
736b6fdc99SDuncan P. N. Exon Smith
746b6fdc99SDuncan P. N. Exon Smithdefine i64 @l(i64 %l) {
756b6fdc99SDuncan P. N. Exon Smithentry:
766b6fdc99SDuncan P. N. Exon Smith  %sum = add i64 %l, 1
776b6fdc99SDuncan P. N. Exon Smith  ret i64 %sum
786b6fdc99SDuncan P. N. Exon Smith}
796b6fdc99SDuncan P. N. Exon Smith
806b6fdc99SDuncan P. N. Exon Smithdefine i1 @loadb() {
816b6fdc99SDuncan P. N. Exon Smithentry:
82a79ac14fSDavid Blaikie  %b = load i1, i1* @b
836b6fdc99SDuncan P. N. Exon Smith  ret i1 %b
846b6fdc99SDuncan P. N. Exon Smith}
856b6fdc99SDuncan P. N. Exon Smith
866b6fdc99SDuncan P. N. Exon Smithdefine i1 @loada() {
876b6fdc99SDuncan P. N. Exon Smithentry:
88f72d05bcSDavid Blaikie  %a = load i1, i1* getelementptr ([4 x i1], [4 x i1]* @a, i64 0, i64 2)
896b6fdc99SDuncan P. N. Exon Smith  ret i1 %a
906b6fdc99SDuncan P. N. Exon Smith}
916b6fdc99SDuncan P. N. Exon Smith
926b6fdc99SDuncan P. N. Exon Smithdefine i32 @f32(i32 %a, i32 %b, i32 %c, i32 %d) {
936b6fdc99SDuncan P. N. Exon Smithentry:
946b6fdc99SDuncan P. N. Exon Smith  br label %first
956b6fdc99SDuncan P. N. Exon Smith
966b6fdc99SDuncan P. N. Exon Smithsecond:
976b6fdc99SDuncan P. N. Exon Smith  %eh = mul i32 %e, %h
986b6fdc99SDuncan P. N. Exon Smith  %sum = add i32 %eh, %ef
996b6fdc99SDuncan P. N. Exon Smith  br label %exit
1006b6fdc99SDuncan P. N. Exon Smith
1016b6fdc99SDuncan P. N. Exon Smithexit:
1026b6fdc99SDuncan P. N. Exon Smith  %product = phi i32 [%ef, %first], [%sum, %second]
1036b6fdc99SDuncan P. N. Exon Smith  ret i32 %product
1046b6fdc99SDuncan P. N. Exon Smith
1056b6fdc99SDuncan P. N. Exon Smithfirst:
1066b6fdc99SDuncan P. N. Exon Smith  %e = add i32 %a, 7
1076b6fdc99SDuncan P. N. Exon Smith  %f = add i32 %b, 7
1086b6fdc99SDuncan P. N. Exon Smith  %g = add i32 %c, 8
1096b6fdc99SDuncan P. N. Exon Smith  %h = add i32 %d, 8
1106b6fdc99SDuncan P. N. Exon Smith  %ef = mul i32 %e, %f
1116b6fdc99SDuncan P. N. Exon Smith  %gh = mul i32 %g, %h
1126b6fdc99SDuncan P. N. Exon Smith  %gotosecond = icmp slt i32 %gh, -9
1136b6fdc99SDuncan P. N. Exon Smith  br i1 %gotosecond, label %second, label %exit
1146b6fdc99SDuncan P. N. Exon Smith}
115c69b5160SDuncan P. N. Exon Smith
116c69b5160SDuncan P. N. Exon Smithdefine i4 @globalAndFunctionFunctionUser() {
117c69b5160SDuncan P. N. Exon Smithentry:
118a79ac14fSDavid Blaikie  %local = load i4, i4* @globalAndFunction
119c69b5160SDuncan P. N. Exon Smith  ret i4 %local
120c69b5160SDuncan P. N. Exon Smith}
121ab6adeb8SDuncan P. N. Exon Smith
122ab6adeb8SDuncan P. N. Exon Smith; Check for when an instruction is its own user.
1238e366958SDuncan P. N. Exon Smithdefine void @selfUser(i1 %a) {
124ab6adeb8SDuncan P. N. Exon Smithentry:
125ab6adeb8SDuncan P. N. Exon Smith  ret void
126ab6adeb8SDuncan P. N. Exon Smith
127ab6adeb8SDuncan P. N. Exon Smithloop1:
128ab6adeb8SDuncan P. N. Exon Smith  br label %loop2
129ab6adeb8SDuncan P. N. Exon Smith
130ab6adeb8SDuncan P. N. Exon Smithloop2:
131ab6adeb8SDuncan P. N. Exon Smith  %var = phi i32 [ %var, %loop1 ], [ %var, %loop2 ]
1328e366958SDuncan P. N. Exon Smith  br label %loop2
133ab6adeb8SDuncan P. N. Exon Smith}
1346e1009b6SDuncan P. N. Exon Smith
1356e1009b6SDuncan P. N. Exon Smith; Check that block addresses work.
1366e1009b6SDuncan P. N. Exon Smith@ba1 = constant i8* blockaddress (@bafunc1, %bb)
137f72d05bcSDavid Blaikie@ba2 = constant i8* getelementptr (i8, i8* blockaddress (@bafunc2, %bb), i61 0)
138f72d05bcSDavid Blaikie@ba3 = constant i8* getelementptr (i8, i8* blockaddress (@bafunc2, %bb), i61 0)
1396e1009b6SDuncan P. N. Exon Smith
1406e1009b6SDuncan P. N. Exon Smithdefine i8* @babefore() {
141f72d05bcSDavid Blaikie  ret i8* getelementptr (i8, i8* blockaddress (@bafunc2, %bb), i61 0)
1426e1009b6SDuncan P. N. Exon Smithbb1:
1436e1009b6SDuncan P. N. Exon Smith  ret i8* blockaddress (@bafunc1, %bb)
1446e1009b6SDuncan P. N. Exon Smithbb2:
1456e1009b6SDuncan P. N. Exon Smith  ret i8* blockaddress (@bafunc3, %bb)
1466e1009b6SDuncan P. N. Exon Smith}
1476e1009b6SDuncan P. N. Exon Smithdefine void @bafunc1() {
1486e1009b6SDuncan P. N. Exon Smith  unreachable
1496e1009b6SDuncan P. N. Exon Smithbb:
1506e1009b6SDuncan P. N. Exon Smith  unreachable
1516e1009b6SDuncan P. N. Exon Smith}
1526e1009b6SDuncan P. N. Exon Smithdefine void @bafunc2() {
1536e1009b6SDuncan P. N. Exon Smith  unreachable
1546e1009b6SDuncan P. N. Exon Smithbb:
1556e1009b6SDuncan P. N. Exon Smith  unreachable
1566e1009b6SDuncan P. N. Exon Smith}
1576e1009b6SDuncan P. N. Exon Smithdefine void @bafunc3() {
1586e1009b6SDuncan P. N. Exon Smith  unreachable
1596e1009b6SDuncan P. N. Exon Smithbb:
1606e1009b6SDuncan P. N. Exon Smith  unreachable
1616e1009b6SDuncan P. N. Exon Smith}
1626e1009b6SDuncan P. N. Exon Smithdefine i8* @baafter() {
1636e1009b6SDuncan P. N. Exon Smith  ret i8* blockaddress (@bafunc2, %bb)
1646e1009b6SDuncan P. N. Exon Smithbb1:
1656e1009b6SDuncan P. N. Exon Smith  ret i8* blockaddress (@bafunc1, %bb)
1666e1009b6SDuncan P. N. Exon Smithbb2:
1676e1009b6SDuncan P. N. Exon Smith  ret i8* blockaddress (@bafunc3, %bb)
1686e1009b6SDuncan P. N. Exon Smith}
169