144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# Test normal conditional branches in cases where block alignments cause 244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# some branches to be out of range. 344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# RUN: python %s | llc -mtriple=s390x-linux-gnu -align-all-blocks=8 | FileCheck %s 444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford 544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# Construct: 644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# 744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# b0: 844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# conditional branch to end 944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# ... 1044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# b<N>: 1144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# conditional branch to end 1244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# b<N+1>: 1344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# conditional branch to b0 1444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# ... 1544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# b<2*N>: 1644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# conditional branch to b0 1744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# end: 1844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# 1944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# with N == 256 + 4. The -align-all-blocks=8 option ensures that all blocks 2044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# are 256 bytes in size. The first 4 blocks and the last 4 blocks are then 2144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# out of range. 2244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# 2344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 0(%r3) 2444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL:\.L[^ ]*]] 2544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 4(%r3) 2644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 2744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 8(%r3) 2844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 2944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 12(%r3) 3044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 3144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 16(%r3) 3244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 3344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 20(%r3) 3444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 3544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 24(%r3) 3644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 3744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 28(%r3) 3844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 3944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# ...lots of other blocks... 4044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1004(%r3) 4144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL:\.L[^ ]*]] 4244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1008(%r3) 4344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 4444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1012(%r3) 4544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 4644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1016(%r3) 4744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 4844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1020(%r3) 4944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: je [[LABEL]] 5044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1024(%r3) 5144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 5244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1028(%r3) 5344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 5444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1032(%r3) 5544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 5644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: c %r4, 1036(%r3) 5744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford# CHECK: jge [[LABEL]] 5844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford 5944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordblocks = 256 + 4 6044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford 6144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint 'define void @f1(i8 *%base, i32 *%stop, i32 %limit) {' 6244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint 'entry:' 6344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint ' br label %b0' 6444b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint '' 6544b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford 6644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiforda, b = 1, 1 6744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordfor i in xrange(blocks): 6844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford a, b = b, a + b 6944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford value = a % 256 7044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford next = 'b%d' % (i + 1) if i + 1 < blocks else 'end' 7144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford other = 'end' if 2 * i < blocks else 'b0' 7244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford print 'b%d:' % i 7344b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford print ' store volatile i8 %d, i8 *%%base' % value 744c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar print ' %%astop%d = getelementptr i32, i32 *%%stop, i64 %d' % (i, i) 754c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar print ' %%acur%d = load i32 , i32 *%%astop%d' % (i, i) 7644b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford print ' %%atest%d = icmp eq i32 %%limit, %%acur%d' % (i, i) 7744b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford print ' br i1 %%atest%d, label %%%s, label %%%s' % (i, other, next) 7844b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandiford 7944b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint '' 8044b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint '%s:' % next 8144b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint ' ret void' 8244b486ed78c60b50aa14d4eed92ee828d4d44293Richard Sandifordprint '}' 83