Files
clang-p2996/llvm/test/CodeGen/SystemZ/codegenprepare-sink-and-for-tm.ll
Kai Nacke a1710eb3cd [SystemZ][NFC] Opaque pointer migration.
The LIT test cases were migrated with the script provided by
Nikita Popov.

No manual changes were made. Committed without review since
no functional changes, after consultation with uweigand.
2022-10-11 21:09:43 +00:00

43 lines
1.1 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
;
; CGP will duplicate and sink the 'icmp' to the users. Test that it does the
; same for the 'and' so that tmll:s result and the nilf is eliminated.
define void @fun(i32 %Arg) {
; CHECK-LABEL: fun:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: ahi %r2, 1
; CHECK-NEXT: lhi %r0, 0
; CHECK-NEXT: cijlh %r0, 0, .LBB0_2
; CHECK-NEXT: # %bb.1: # %bb1
; CHECK-NEXT: tmll %r2, 16
; CHECK-NEXT: lochie %r0, 1
; CHECK-NEXT: st %r0, 0(%r1)
; CHECK-NEXT: br %r14
; CHECK-NEXT: .LBB0_2: # %bb2
; CHECK-NEXT: tmll %r2, 16
; CHECK-NEXT: lhi %r0, 16
; CHECK-NEXT: lochie %r0, 4
; CHECK-NEXT: st %r0, 0(%r1)
; CHECK-NEXT: br %r14
entry:
%A = add i32 %Arg, 1
%N = and i32 %A, 16
%i4 = icmp eq i32 %N, 0
br i1 undef, label %bb1, label %bb2
bb1:
%i9 = zext i1 %i4 to i32
store i32 %i9, ptr undef
br label %bb3
bb2:
%i13 = select i1 %i4, i32 4, i32 16
store i32 %i13, ptr undef
br label %bb3
bb3:
ret void
}