Files
clang-p2996/llvm/test/CodeGen/SystemZ/risbg-03.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

36 lines
981 B
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; Test use of RISBG vs RISBGN on zEC12.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=zEC12 | FileCheck %s
; On zEC12, we generally prefer RISBGN.
define i64 @f1(i64 %a, i64 %b) {
; CHECK-LABEL: f1:
; CHECK: # %bb.0:
; CHECK-NEXT: risbgn %r2, %r3, 60, 62, 0
; CHECK-NEXT: br %r14
%anda = and i64 %a, -15
%andb = and i64 %b, 14
%or = or i64 %anda, %andb
ret i64 %or
}
; But we may fall back to RISBG if we can use the condition code.
define i64 @f2(i64 %a, i64 %b, ptr %c) {
; CHECK-LABEL: f2:
; CHECK: # %bb.0:
; CHECK-NEXT: risbg %r2, %r3, 60, 62, 0
; CHECK-NEXT: ipm %r0
; CHECK-NEXT: risblg %r0, %r0, 31, 159, 35
; CHECK-NEXT: st %r0, 0(%r4)
; CHECK-NEXT: br %r14
%anda = and i64 %a, -15
%andb = and i64 %b, 14
%or = or i64 %anda, %andb
%cmp = icmp sgt i64 %or, 0
%conv = zext i1 %cmp to i32
store i32 %conv, ptr %c, align 4
ret i64 %or
}