# Test normal conditional branches in cases where block alignments cause
# some branches to be out of range.
# RUN: %python %s | llc -mtriple=s390x-linux-gnu -align-all-blocks=8 | FileCheck %s

# Construct:
#
# b0:
#   conditional branch to end
#   ...
# b<N>:
#   conditional branch to end
# b<N+1>:
#   conditional branch to b0
#   ...
# b<2*N>:
#   conditional branch to b0
# end:
#
# with N == 256 + 4.  The -align-all-blocks=8 option ensures that all blocks
# are 256 bytes in size.  The first 4 blocks and the last 4 blocks are then
# out of range.
#
# CHECK: c %r4, 0(%r3)
# CHECK: jge [[LABEL:\.L[^ ]*]]
# CHECK: c %r4, 4(%r3)
# CHECK: jge [[LABEL]]
# CHECK: c %r4, 8(%r3)
# CHECK: jge [[LABEL]]
# CHECK: c %r4, 12(%r3)
# CHECK: jge [[LABEL]]
# CHECK: c %r4, 16(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 20(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 24(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 28(%r3)
# CHECK: je [[LABEL]]
# ...lots of other blocks...
# CHECK: c %r4, 1004(%r3)
# CHECK: je [[LABEL:\.L[^ ]*]]
# CHECK: c %r4, 1008(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 1012(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 1016(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 1020(%r3)
# CHECK: je [[LABEL]]
# CHECK: c %r4, 1024(%r3)
# CHECK: jge [[LABEL]]
# CHECK: c %r4, 1028(%r3)
# CHECK: jge [[LABEL]]
# CHECK: c %r4, 1032(%r3)
# CHECK: jge [[LABEL]]
# CHECK: c %r4, 1036(%r3)
# CHECK: jge [[LABEL]]

from __future__ import print_function

blocks = 256 + 4

print('define void @f1(i8 *%base, i32 *%stop, i32 %limit) {')
print('entry:')
print('  br label %b0')
print('')

a, b = 1, 1
for i in range(blocks):
    a, b = b, a + b
    value = a % 256
    next = 'b%d' % (i + 1) if i + 1 < blocks else 'end'
    other = 'end' if 2 * i < blocks else 'b0'
    print('b%d:' % i)
    print('  store volatile i8 %d, i8 *%%base' % value)
    print('  %%astop%d = getelementptr i32, i32 *%%stop, i64 %d' % (i, i))
    print('  %%acur%d = load i32 , i32 *%%astop%d' % (i, i))
    print('  %%atest%d = icmp eq i32 %%limit, %%acur%d' % (i, i))
    print('  br i1 %%atest%d, label %%%s, label %%%s' % (i, other, next))

print('')
print('%s:' % next)
print('  ret void')
print('}')
