mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Post-commit fixes for r209643
Detected by Daniel Jasper, Ilia Filippov, and Andrea Di Biagio Fixed the argument order to select (the mask semantics to blendv* are the inverse of select) and fixed the tests Added parenthesis to the assert condition Ran clang-format git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209667 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fb26356bed
commit
078862e67f
@ -734,10 +734,13 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
||||
auto SelectorType = cast<VectorType>(Mask->getType());
|
||||
auto EltTy = SelectorType->getElementType();
|
||||
unsigned Size = SelectorType->getNumElements();
|
||||
unsigned BitWidth = EltTy->isFloatTy() ? 32 : (EltTy->isDoubleTy() ? 64 : EltTy->getIntegerBitWidth());
|
||||
unsigned BitWidth =
|
||||
EltTy->isFloatTy()
|
||||
? 32
|
||||
: (EltTy->isDoubleTy() ? 64 : EltTy->getIntegerBitWidth());
|
||||
assert((BitWidth == 64 || BitWidth == 32 || BitWidth == 8) &&
|
||||
"Wrong arguments for variable blend intrinsic");
|
||||
SmallVector<Constant*, 32> Selectors;
|
||||
SmallVector<Constant *, 32> Selectors;
|
||||
for (unsigned I = 0; I < Size; ++I) {
|
||||
// The intrinsics only read the top bit
|
||||
uint64_t Selector;
|
||||
@ -748,7 +751,8 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
||||
Selectors.push_back(ConstantInt::get(Tyi1, Selector >> (BitWidth - 1)));
|
||||
}
|
||||
auto NewSelector = ConstantVector::get(Selectors);
|
||||
return SelectInst::Create(NewSelector, II->getArgOperand(0), II->getArgOperand(1), "blendv");
|
||||
return SelectInst::Create(NewSelector, II->getArgOperand(1),
|
||||
II->getArgOperand(0), "blendv");
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
@ -2,42 +2,42 @@
|
||||
|
||||
define <2 x double> @constant_blendvpd(<2 x double> %xy, <2 x double> %ab) {
|
||||
; CHECK-LABEL: @constant_blendvpd
|
||||
; CHECK: select <2 x i1> <i1 true, i1 false>
|
||||
; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x double> %ab, <2 x double> %xy
|
||||
%1 = tail call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %xy, <2 x double> %ab, <2 x double> <double 0xFFFFFFFFE0000000, double 0.000000e+00>)
|
||||
ret <2 x double> %1
|
||||
}
|
||||
|
||||
define <4 x float> @constant_blendvps(<4 x float> %xyzw, <4 x float> %abcd) {
|
||||
; CHECK-LABEL: @constant_blendvps
|
||||
; CHECK: select <4 x i1> <i1 false, i1 false, i1 false, i1 true>
|
||||
; CHECK: select <4 x i1> <i1 false, i1 false, i1 false, i1 true>, <4 x float> %abcd, <4 x float> %xyzw
|
||||
%1 = tail call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %xyzw, <4 x float> %abcd, <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0xFFFFFFFFE0000000>)
|
||||
ret <4 x float> %1
|
||||
}
|
||||
|
||||
define <16 x i8> @constant_pblendvb(<16 x i8> %xyzw, <16 x i8> %abcd) {
|
||||
; CHECK-LABEL: @constant_pblendvb
|
||||
; CHECK: select <16 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>
|
||||
; CHECK: select <16 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>, <16 x i8> %abcd, <16 x i8> %xyzw
|
||||
%1 = tail call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %xyzw, <16 x i8> %abcd, <16 x i8> <i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0>)
|
||||
ret <16 x i8> %1
|
||||
}
|
||||
|
||||
define <4 x double> @constant_blendvpd_avx(<4 x double> %xy, <4 x double> %ab) {
|
||||
; CHECK-LABEL: @constant_blendvpd_avx
|
||||
; CHECK: select <4 x i1> <i1 true, i1 false, i1 true, i1 false>
|
||||
; CHECK: select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %ab, <4 x double> %xy
|
||||
%1 = tail call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %xy, <4 x double> %ab, <4 x double> <double 0xFFFFFFFFE0000000, double 0.000000e+00, double 0xFFFFFFFFE0000000, double 0.000000e+00>)
|
||||
ret <4 x double> %1
|
||||
}
|
||||
|
||||
define <8 x float> @constant_blendvps_avx(<8 x float> %xyzw, <8 x float> %abcd) {
|
||||
; CHECK-LABEL: @constant_blendvps_avx
|
||||
; CHECK: select <8 x i1> <i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true>
|
||||
; CHECK: select <8 x i1> <i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true>, <8 x float> %abcd, <8 x float> %xyzw
|
||||
%1 = tail call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %xyzw, <8 x float> %abcd, <8 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0xFFFFFFFFE0000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0xFFFFFFFFE0000000>)
|
||||
ret <8 x float> %1
|
||||
}
|
||||
|
||||
define <32 x i8> @constant_pblendvb_avx2(<32 x i8> %xyzw, <32 x i8> %abcd) {
|
||||
; CHECK-LABEL: @constant_pblendvb_avx2
|
||||
; CHECK: select <32 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>
|
||||
; CHECK: select <32 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>, <32 x i8> %abcd, <32 x i8> %xyzw
|
||||
%1 = tail call <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8> %xyzw, <32 x i8> %abcd,
|
||||
<32 x i8> <i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0,
|
||||
i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0,
|
||||
@ -53,4 +53,3 @@ declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x d
|
||||
declare <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8>, <32 x i8>, <32 x i8>)
|
||||
declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>)
|
||||
declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user