xref: /llvm-project/llvm/test/CodeGen/SystemZ/rosbg-02.ll (revision a1710eb3cd5823c5d14899112ca3086acbdbe9cb)
1; Test that a rosbg conversion involving a sign extend operation rotates with
2; the right number of steps.
3;
4; RUN: llc < %s -mtriple=s390x-linux-gnu -O0 | FileCheck %s
5
6@g_136 = external global i16, align 2
7@g_999 = external global i32, align 4
8
9; Function Attrs: nounwind
10define void @main() {
11  %1 = load i32, ptr undef, align 4
12  store i16 -28141, ptr @g_136, align 2
13  %2 = load i32, ptr undef, align 4
14  %3 = xor i32 -28141, %2
15  %4 = xor i32 %1, %3
16  %5 = sext i32 %4 to i64
17  %6 = icmp sgt i64 0, %5
18  %7 = zext i1 %6 to i32
19  %8 = load i32, ptr @g_999, align 4
20  %9 = or i32 %8, %7
21; CHECK: rosbg   {{%r[0-9]+}}, {{%r[0-9]+}}, 63, 63, 33
22  store i32 %9, ptr @g_999, align 4
23  ret void
24}
25