Kai Nacke be4a1dfbf9 [PowerPC] Extend GlobalISel implementation to emit and/or/xor.
Adds some more code to GlobalISel to enable instruction selection for and/or/xor.

- Makes G_IMPLICIT_DEF, G_CONSTANT, G_AND, G_OR, G_XOR legal for 64bit register size.
- Implement lowerReturn in CallLowering
- Provides mapping of the operands to register banks.
- Adds register info to G_COPY operands.

The utility functions are all only implemented so far to support this use case.
Especially the functions in PPCGenRegisterBankInfo.def are too simple for
general use.

Reviewed By: nemanjai, shchenz, amyk

Differential Revision: https://reviews.llvm.org/D127530
2022-11-21 20:08:20 +00:00

71 lines
1.6 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple ppc64le-linux -ppc-asm-full-reg-names -global-isel -o - < %s \
; RUN: | FileCheck %s
define i64 @test_andi64(i64 %a, i64 %b) {
; CHECK-LABEL: test_andi64:
; CHECK: # %bb.0:
; CHECK-NEXT: and r3, r3, r4
; CHECK-NEXT: blr
%res = and i64 %a, %b
ret i64 %res
}
define i64 @test_nandi64(i64 %a, i64 %b) {
; CHECK-LABEL: test_nandi64:
; CHECK: # %bb.0:
; CHECK-NEXT: nand r3, r3, r4
; CHECK-NEXT: blr
%and = and i64 %a, %b
%neg = xor i64 %and, -1
ret i64 %neg
}
define i64 @test_andci64(i64 %a, i64 %b) {
; CHECK-LABEL: test_andci64:
; CHECK: # %bb.0:
; CHECK-NEXT: andc r3, r3, r4
; CHECK-NEXT: blr
%neg = xor i64 %b, -1
%and = and i64 %a, %neg
ret i64 %and
}
define i64 @test_ori64(i64 %a, i64 %b) {
; CHECK-LABEL: test_ori64:
; CHECK: # %bb.0:
; CHECK-NEXT: or r3, r3, r4
; CHECK-NEXT: blr
%res = or i64 %a, %b
ret i64 %res
}
define i64 @test_orci64(i64 %a, i64 %b) {
; CHECK-LABEL: test_orci64:
; CHECK: # %bb.0:
; CHECK-NEXT: orc r3, r3, r4
; CHECK-NEXT: blr
%neg = xor i64 %b, -1
%or = or i64 %a, %neg
ret i64 %or
}
define i64 @test_nori64(i64 %a, i64 %b) {
; CHECK-LABEL: test_nori64:
; CHECK: # %bb.0:
; CHECK-NEXT: nor r3, r3, r4
; CHECK-NEXT: blr
%or = or i64 %a, %b
%neg = xor i64 %or, -1
ret i64 %neg
}
define i64 @test_xori64(i64 %a, i64 %b) {
; CHECK-LABEL: test_xori64:
; CHECK: # %bb.0:
; CHECK-NEXT: xor r3, r3, r4
; CHECK-NEXT: blr
%res = xor i64 %a, %b
ret i64 %res
}