mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-13 09:14:38 +00:00
![Elena Demikhovsky](/assets/img/avatar_default.png)
i1 type is a legal type on AVX-512 and can be passed as parameter or return value. i1 is promoted to i8 on return and to i32 for call arguments (i8 is also promoted to i32 here). The result code is similar to the previous X86 targets, where i1 is allways promoted to i8. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237350 91177308-0d34-0410-b5e6-96231b3b80d8
154 lines
3.4 KiB
LLVM
154 lines
3.4 KiB
LLVM
; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=KNL
|
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=SKX
|
|
; RUN: llc < %s -mtriple=i686-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=KNL_X32
|
|
|
|
; KNL-LABEL: test1
|
|
; KNL: vxorps
|
|
define <16 x i1> @test1() {
|
|
ret <16 x i1> zeroinitializer
|
|
}
|
|
|
|
; SKX-LABEL: test2
|
|
; SKX: vpmovb2m
|
|
; SKX: vpmovb2m
|
|
; SKX: kandw
|
|
; SKX: vpmovm2b
|
|
; KNL-LABEL: test2
|
|
; KNL: vpmovsxbd
|
|
; KNL: vpmovsxbd
|
|
; KNL: vpandd
|
|
; KNL: vpmovdb
|
|
define <16 x i1> @test2(<16 x i1>%a, <16 x i1>%b) {
|
|
%c = and <16 x i1>%a, %b
|
|
ret <16 x i1> %c
|
|
}
|
|
|
|
; SKX-LABEL: test3
|
|
; SKX: vpmovw2m
|
|
; SKX: vpmovw2m
|
|
; SKX: kandb
|
|
; SKX: vpmovm2w
|
|
define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
|
|
%c = and <8 x i1>%a, %b
|
|
ret <8 x i1> %c
|
|
}
|
|
|
|
; SKX-LABEL: test4
|
|
; SKX: vpmovd2m
|
|
; SKX: vpmovd2m
|
|
; SKX: kandw
|
|
; SKX: vpmovm2d
|
|
define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
|
|
%c = and <4 x i1>%a, %b
|
|
ret <4 x i1> %c
|
|
}
|
|
|
|
; SKX-LABEL: test5
|
|
; SKX: vpcmpgtd
|
|
; SKX: vpmovm2w
|
|
; SKX: call
|
|
; SKX: vpmovzxwd
|
|
declare <8 x i1> @func8xi1(<8 x i1> %a)
|
|
define <8 x i32> @test5(<8 x i32>%a, <8 x i32>%b) {
|
|
%cmpRes = icmp sgt <8 x i32>%a, %b
|
|
%resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
|
|
%res = sext <8 x i1>%resi to <8 x i32>
|
|
ret <8 x i32> %res
|
|
}
|
|
|
|
declare <16 x i1> @func16xi1(<16 x i1> %a)
|
|
|
|
; KNL-LABEL: test6
|
|
; KNL: vpbroadcastd
|
|
; KNL: vpmovdb
|
|
; KNL: call
|
|
; KNL: vpmovzxbd
|
|
; KNL: vpslld $31, %zmm
|
|
; KNL: vpsrad $31, %zmm
|
|
define <16 x i32> @test6(<16 x i32>%a, <16 x i32>%b) {
|
|
%cmpRes = icmp sgt <16 x i32>%a, %b
|
|
%resi = call <16 x i1> @func16xi1(<16 x i1> %cmpRes)
|
|
%res = sext <16 x i1>%resi to <16 x i32>
|
|
ret <16 x i32> %res
|
|
}
|
|
|
|
declare <4 x i1> @func4xi1(<4 x i1> %a)
|
|
; SKX-LABEL: test7
|
|
; SKX: vpmovm2d
|
|
; SKX: call
|
|
; SKX: vpslld $31, %xmm
|
|
; SKX: vpsrad $31, %xmm
|
|
|
|
define <4 x i32> @test7(<4 x i32>%a, <4 x i32>%b) {
|
|
%cmpRes = icmp sgt <4 x i32>%a, %b
|
|
%resi = call <4 x i1> @func4xi1(<4 x i1> %cmpRes)
|
|
%res = sext <4 x i1>%resi to <4 x i32>
|
|
ret <4 x i32> %res
|
|
}
|
|
|
|
; SKX-LABEL: test7a
|
|
; SKX: call
|
|
; SKX: vpmovw2m %xmm0, %k0
|
|
; SKX: kandb
|
|
define <8 x i1> @test7a(<8 x i32>%a, <8 x i32>%b) {
|
|
%cmpRes = icmp sgt <8 x i32>%a, %b
|
|
%resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
|
|
%res = and <8 x i1>%resi, <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>
|
|
ret <8 x i1> %res
|
|
}
|
|
|
|
|
|
; KNL_X32-LABEL: test8
|
|
; KNL_X32: testb $1, 4(%esp)
|
|
; KNL_X32:jne
|
|
|
|
; KNL-LABEL: test8
|
|
; KNL: testb $1, %dil
|
|
; KNL:jne
|
|
|
|
define <16 x i8> @test8(<16 x i8> %a1, <16 x i8> %a2, i1 %cond) {
|
|
%res = select i1 %cond, <16 x i8> %a1, <16 x i8> %a2
|
|
ret <16 x i8> %res
|
|
}
|
|
|
|
; KNL-LABEL: test9
|
|
; KNL: vucomisd
|
|
; KNL: setb
|
|
define i1 @test9(double %a, double %b) {
|
|
%c = fcmp ugt double %a, %b
|
|
ret i1 %c
|
|
}
|
|
|
|
; KNL_X32-LABEL: test10
|
|
; KNL_X32: testb $1, 12(%esp)
|
|
; KNL_X32: cmovnel
|
|
|
|
; KNL-LABEL: test10
|
|
; KNL: testb $1, %dl
|
|
; KNL: cmovel
|
|
define i32 @test10(i32 %a, i32 %b, i1 %cond) {
|
|
%c = select i1 %cond, i32 %a, i32 %b
|
|
ret i32 %c
|
|
}
|
|
|
|
; KNL-LABEL: test11
|
|
; KNL: cmp
|
|
; KNL: setg
|
|
define i1 @test11(i32 %a, i32 %b) {
|
|
%c = icmp sgt i32 %a, %b
|
|
ret i1 %c
|
|
}
|
|
|
|
; KNL-LABEL: test12
|
|
; KNL: callq _test11
|
|
;; return value in %al
|
|
; KNL: movzbl %al, %ebx
|
|
; KNL: callq _test10
|
|
; KNL: testb $1, %bl
|
|
|
|
define i32 @test12(i32 %a1, i32 %a2, i32 %b1) {
|
|
%cond = call i1 @test11(i32 %a1, i32 %b1)
|
|
%res = call i32 @test10(i32 %a1, i32 %a2, i1 %cond)
|
|
%res1 = select i1 %cond, i32 %res, i32 0
|
|
ret i32 %res1
|
|
} |