mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
b09bb79732
Update CodeGen regression tests with marker at first line telling it's auto-generated by the script, under PowerPC directory. For some reason, these tests are generated but manually written, which makes things unclear when someone's change affecting them. However, some tests only show simple change after re-generated, like extra blank lines, disappearing '.localentry', etc. Besides, some tests are generated but added checks for debug output. This commit doesn't try updating them.
313 lines
8.3 KiB
LLVM
313 lines
8.3 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P9
|
|
; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P8
|
|
|
|
define signext i64 @maddld64(i64 signext %a, i64 signext %b) {
|
|
; CHECK-P9-LABEL: maddld64:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: maddld 3, 4, 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld64:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mulld 4, 4, 3
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
entry:
|
|
%mul = mul i64 %b, %a
|
|
%add = add i64 %mul, %a
|
|
ret i64 %add
|
|
}
|
|
|
|
define signext i32 @maddld32(i32 signext %a, i32 signext %b) {
|
|
; CHECK-P9-LABEL: maddld32:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: maddld 3, 4, 3, 3
|
|
; CHECK-P9-NEXT: extsw 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 4, 4, 3
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: extsw 3, 3
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
entry:
|
|
%mul = mul i32 %b, %a
|
|
%add = add i32 %mul, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
define signext i16 @maddld16(i16 signext %a, i16 signext %b, i16 signext %c) {
|
|
; CHECK-P9-LABEL: maddld16:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: maddld 3, 4, 3, 5
|
|
; CHECK-P9-NEXT: extsh 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld16:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 3, 4, 3
|
|
; CHECK-P8-NEXT: add 3, 3, 5
|
|
; CHECK-P8-NEXT: extsh 3, 3
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
entry:
|
|
%mul = mul i16 %b, %a
|
|
%add = add i16 %mul, %c
|
|
ret i16 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32zeroext(i32 zeroext %a, i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32zeroext:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: maddld 3, 4, 3, 3
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32zeroext:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 4, 4, 3
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
entry:
|
|
%mul = mul i32 %b, %a
|
|
%add = add i32 %mul, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
define signext i32 @maddld32nsw(i32 signext %a, i32 signext %b) {
|
|
; CHECK-P9-LABEL: maddld32nsw:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: maddld 3, 4, 3, 3
|
|
; CHECK-P9-NEXT: extsw 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nsw:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 4, 4, 3
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: extsw 3, 3
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
entry:
|
|
%mul = mul nsw i32 %b, %a
|
|
%add = add nsw i32 %mul, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32nuw(i32 zeroext %a, i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32nuw:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: maddld 3, 4, 3, 3
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nuw:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 4, 4, 3
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
entry:
|
|
%mul = mul nuw i32 %b, %a
|
|
%add = add nuw i32 %mul, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
define signext i64 @maddld64_imm(i64 signext %a, i64 signext %b) {
|
|
; CHECK-P9-LABEL: maddld64_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mulli 4, 4, 13
|
|
; CHECK-P9-NEXT: add 3, 4, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld64_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mulli 4, 4, 13
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul i64 %b, 13
|
|
%add = add i64 %mul, %a
|
|
ret i64 %add
|
|
}
|
|
|
|
define signext i32 @maddld32_imm(i32 signext %a, i32 signext %b) {
|
|
; CHECK-P9-LABEL: maddld32_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mullw 3, 4, 3
|
|
; CHECK-P9-NEXT: addi 3, 3, 13
|
|
; CHECK-P9-NEXT: extsw 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 3, 4, 3
|
|
; CHECK-P8-NEXT: addi 3, 3, 13
|
|
; CHECK-P8-NEXT: extsw 3, 3
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul i32 %b, %a
|
|
%add = add i32 %mul, 13
|
|
ret i32 %add
|
|
}
|
|
|
|
define signext i16 @maddld16_imm(i16 signext %a, i16 signext %b, i16 signext %c) {
|
|
; CHECK-P9-LABEL: maddld16_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mulli 3, 4, 13
|
|
; CHECK-P9-NEXT: add 3, 3, 5
|
|
; CHECK-P9-NEXT: extsh 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld16_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mulli 3, 4, 13
|
|
; CHECK-P8-NEXT: add 3, 3, 5
|
|
; CHECK-P8-NEXT: extsh 3, 3
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul i16 %b, 13
|
|
%add = add i16 %mul, %c
|
|
ret i16 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32zeroext_imm(i32 zeroext %a, i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32zeroext_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mullw 3, 4, 3
|
|
; CHECK-P9-NEXT: addi 3, 3, 13
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32zeroext_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 3, 4, 3
|
|
; CHECK-P8-NEXT: addi 3, 3, 13
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul i32 %b, %a
|
|
%add = add i32 %mul, 13
|
|
ret i32 %add
|
|
}
|
|
|
|
define signext i32 @maddld32nsw_imm(i32 signext %a, i32 signext %b) {
|
|
; CHECK-P9-LABEL: maddld32nsw_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mulli 4, 4, 13
|
|
; CHECK-P9-NEXT: add 3, 4, 3
|
|
; CHECK-P9-NEXT: extsw 3, 3
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nsw_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mulli 4, 4, 13
|
|
; CHECK-P8-NEXT: add 3, 4, 3
|
|
; CHECK-P8-NEXT: extsw 3, 3
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul nsw i32 %b, 13
|
|
%add = add nsw i32 %mul, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32nuw_imm(i32 zeroext %a, i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32nuw_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mullw 3, 4, 3
|
|
; CHECK-P9-NEXT: addi 3, 3, 13
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nuw_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mullw 3, 4, 3
|
|
; CHECK-P8-NEXT: addi 3, 3, 13
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul nuw i32 %b, %a
|
|
%add = add nuw i32 %mul, 13
|
|
ret i32 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32nuw_imm_imm(i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32nuw_imm_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: mulli 3, 3, 18
|
|
; CHECK-P9-NEXT: addi 3, 3, 13
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nuw_imm_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: mulli 3, 3, 18
|
|
; CHECK-P8-NEXT: addi 3, 3, 13
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul nuw i32 %b, 18
|
|
%add = add nuw i32 %mul, 13
|
|
ret i32 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32nuw_bigimm_imm(i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32nuw_bigimm_imm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: lis 4, 26127
|
|
; CHECK-P9-NEXT: ori 4, 4, 63251
|
|
; CHECK-P9-NEXT: mullw 3, 3, 4
|
|
; CHECK-P9-NEXT: addi 3, 3, 13
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nuw_bigimm_imm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: lis 4, 26127
|
|
; CHECK-P8-NEXT: ori 4, 4, 63251
|
|
; CHECK-P8-NEXT: mullw 3, 3, 4
|
|
; CHECK-P8-NEXT: addi 3, 3, 13
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
entry:
|
|
%mul = mul nuw i32 %b, 1712322323
|
|
%add = add nuw i32 %mul, 13
|
|
ret i32 %add
|
|
}
|
|
|
|
define zeroext i32 @maddld32nuw_bigimm_bigimm(i32 zeroext %b) {
|
|
; CHECK-P9-LABEL: maddld32nuw_bigimm_bigimm:
|
|
; CHECK-P9: # %bb.0: # %entry
|
|
; CHECK-P9-NEXT: lis 4, -865
|
|
; CHECK-P9-NEXT: lis 5, 26127
|
|
; CHECK-P9-NEXT: ori 4, 4, 42779
|
|
; CHECK-P9-NEXT: ori 5, 5, 63251
|
|
; CHECK-P9-NEXT: maddld 3, 3, 5, 4
|
|
; CHECK-P9-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P9-NEXT: blr
|
|
;
|
|
; CHECK-P8-LABEL: maddld32nuw_bigimm_bigimm:
|
|
; CHECK-P8: # %bb.0: # %entry
|
|
; CHECK-P8-NEXT: lis 4, 26127
|
|
; CHECK-P8-NEXT: ori 4, 4, 63251
|
|
; CHECK-P8-NEXT: mullw 3, 3, 4
|
|
; CHECK-P8-NEXT: addi 3, 3, -22757
|
|
; CHECK-P8-NEXT: addis 3, 3, -864
|
|
; CHECK-P8-NEXT: clrldi 3, 3, 32
|
|
; CHECK-P8-NEXT: blr
|
|
|
|
|
|
|
|
entry:
|
|
%mul = mul nuw i32 %b, 1712322323
|
|
%add = add nuw i32 %mul, 17123223323
|
|
ret i32 %add
|
|
}
|