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