@@ -1691,41 +1691,25 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
1691
1691
C = ConstantInt::getNullValue (Builder.getInt16Ty ());
1692
1692
Rep = Builder.CreateICmpEQ (Rep, C);
1693
1693
Rep = Builder.CreateZExt (Rep, Builder.getInt32Ty ());
1694
- } else if (IsX86 && (Name == " sse.add.ss" || Name == " sse2.add.sd" )) {
1694
+ } else if (IsX86 && (Name == " sse.add.ss" || Name == " sse2.add.sd" ||
1695
+ Name == " sse.sub.ss" || Name == " sse2.sub.sd" ||
1696
+ Name == " sse.mul.ss" || Name == " sse2.mul.sd" ||
1697
+ Name == " sse.div.ss" || Name == " sse2.div.sd" )) {
1695
1698
Type *I32Ty = Type::getInt32Ty (C);
1696
1699
Value *Elt0 = Builder.CreateExtractElement (CI->getArgOperand (0 ),
1697
1700
ConstantInt::get (I32Ty, 0 ));
1698
1701
Value *Elt1 = Builder.CreateExtractElement (CI->getArgOperand (1 ),
1699
1702
ConstantInt::get (I32Ty, 0 ));
1700
- Rep = Builder.CreateInsertElement (CI->getArgOperand (0 ),
1701
- Builder.CreateFAdd (Elt0, Elt1),
1702
- ConstantInt::get (I32Ty, 0 ));
1703
- } else if (IsX86 && (Name == " sse.sub.ss" || Name == " sse2.sub.sd" )) {
1704
- Type *I32Ty = Type::getInt32Ty (C);
1705
- Value *Elt0 = Builder.CreateExtractElement (CI->getArgOperand (0 ),
1706
- ConstantInt::get (I32Ty, 0 ));
1707
- Value *Elt1 = Builder.CreateExtractElement (CI->getArgOperand (1 ),
1708
- ConstantInt::get (I32Ty, 0 ));
1709
- Rep = Builder.CreateInsertElement (CI->getArgOperand (0 ),
1710
- Builder.CreateFSub (Elt0, Elt1),
1711
- ConstantInt::get (I32Ty, 0 ));
1712
- } else if (IsX86 && (Name == " sse.mul.ss" || Name == " sse2.mul.sd" )) {
1713
- Type *I32Ty = Type::getInt32Ty (C);
1714
- Value *Elt0 = Builder.CreateExtractElement (CI->getArgOperand (0 ),
1715
- ConstantInt::get (I32Ty, 0 ));
1716
- Value *Elt1 = Builder.CreateExtractElement (CI->getArgOperand (1 ),
1717
- ConstantInt::get (I32Ty, 0 ));
1718
- Rep = Builder.CreateInsertElement (CI->getArgOperand (0 ),
1719
- Builder.CreateFMul (Elt0, Elt1),
1720
- ConstantInt::get (I32Ty, 0 ));
1721
- } else if (IsX86 && (Name == " sse.div.ss" || Name == " sse2.div.sd" )) {
1722
- Type *I32Ty = Type::getInt32Ty (C);
1723
- Value *Elt0 = Builder.CreateExtractElement (CI->getArgOperand (0 ),
1724
- ConstantInt::get (I32Ty, 0 ));
1725
- Value *Elt1 = Builder.CreateExtractElement (CI->getArgOperand (1 ),
1726
- ConstantInt::get (I32Ty, 0 ));
1727
- Rep = Builder.CreateInsertElement (CI->getArgOperand (0 ),
1728
- Builder.CreateFDiv (Elt0, Elt1),
1703
+ Value *EltOp;
1704
+ if (Name.contains (" .add." ))
1705
+ EltOp = Builder.CreateFAdd (Elt0, Elt1);
1706
+ else if (Name.contains (" .sub." ))
1707
+ EltOp = Builder.CreateFSub (Elt0, Elt1);
1708
+ else if (Name.contains (" .mul." ))
1709
+ EltOp = Builder.CreateFMul (Elt0, Elt1);
1710
+ else
1711
+ EltOp = Builder.CreateFDiv (Elt0, Elt1);
1712
+ Rep = Builder.CreateInsertElement (CI->getArgOperand (0 ), EltOp,
1729
1713
ConstantInt::get (I32Ty, 0 ));
1730
1714
} else if (IsX86 && Name.startswith (" avx512.mask.pcmp" )) {
1731
1715
// "avx512.mask.pcmpeq." or "avx512.mask.pcmpgt."
@@ -2097,14 +2081,14 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
2097
2081
Rep = EmitX86Select (Builder, CI->getArgOperand (2 ), Rep,
2098
2082
CI->getArgOperand (1 ));
2099
2083
} else if (IsX86 && (Name.startswith (" sse2.paddus" ) ||
2084
+ Name.startswith (" sse2.psubus" ) ||
2100
2085
Name.startswith (" avx2.paddus" ) ||
2101
- Name.startswith (" avx512.mask.paddus" ))) {
2102
- Rep = UpgradeX86AddSubSatIntrinsics (Builder, *CI, true /* IsAdd*/ );
2103
- } else if (IsX86 && (Name.startswith (" sse2.psubus" ) ||
2104
2086
Name.startswith (" avx2.psubus" ) ||
2087
+ Name.startswith (" avx512.mask.paddus" ) ||
2105
2088
Name.startswith (" avx512.mask.psubus" ))) {
2106
- Rep = UpgradeX86AddSubSatIntrinsics (Builder, *CI, false /* IsAdd*/ );
2107
- }else if (IsX86 && Name.startswith (" avx512.mask.palignr." )) {
2089
+ bool IsAdd = Name.contains (" .paddus" );
2090
+ Rep = UpgradeX86AddSubSatIntrinsics (Builder, *CI, IsAdd);
2091
+ } else if (IsX86 && Name.startswith (" avx512.mask.palignr." )) {
2108
2092
Rep = UpgradeX86ALIGNIntrinsics (Builder, CI->getArgOperand (0 ),
2109
2093
CI->getArgOperand (1 ),
2110
2094
CI->getArgOperand (2 ),
0 commit comments