Lines Matching refs:mlir
95 mlir::Location loc) in IntrinsicLibrary()
103 mlir::Type resultType,
113 mlir::Value genRuntimeCall(llvm::StringRef name, mlir::Type,
114 llvm::ArrayRef<mlir::Value>);
117 std::function<mlir::Value(Fortran::lower::FirOpBuilder &, mlir::Location,
118 llvm::ArrayRef<mlir::Value>)>;
121 mlir::FunctionType soughtFuncType);
123 mlir::Value genAbs(mlir::Type, llvm::ArrayRef<mlir::Value>);
124 mlir::Value genAimag(mlir::Type, llvm::ArrayRef<mlir::Value>);
125 mlir::Value genAint(mlir::Type, llvm::ArrayRef<mlir::Value>);
126 mlir::Value genAnint(mlir::Type, llvm::ArrayRef<mlir::Value>);
127 mlir::Value genCeiling(mlir::Type, llvm::ArrayRef<mlir::Value>);
128 mlir::Value genConjg(mlir::Type, llvm::ArrayRef<mlir::Value>);
129 mlir::Value genDim(mlir::Type, llvm::ArrayRef<mlir::Value>);
130 mlir::Value genDprod(mlir::Type, llvm::ArrayRef<mlir::Value>);
132 mlir::Value genExtremum(mlir::Type, llvm::ArrayRef<mlir::Value>);
133 mlir::Value genFloor(mlir::Type, llvm::ArrayRef<mlir::Value>);
134 mlir::Value genIAnd(mlir::Type, llvm::ArrayRef<mlir::Value>);
135 mlir::Value genIchar(mlir::Type, llvm::ArrayRef<mlir::Value>);
136 mlir::Value genIEOr(mlir::Type, llvm::ArrayRef<mlir::Value>);
137 mlir::Value genIOr(mlir::Type, llvm::ArrayRef<mlir::Value>);
138 fir::ExtendedValue genLen(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
139 fir::ExtendedValue genLenTrim(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
140 mlir::Value genMerge(mlir::Type, llvm::ArrayRef<mlir::Value>);
141 mlir::Value genMod(mlir::Type, llvm::ArrayRef<mlir::Value>);
142 mlir::Value genNint(mlir::Type, llvm::ArrayRef<mlir::Value>);
143 mlir::Value genSign(mlir::Type, llvm::ArrayRef<mlir::Value>);
147 mlir::Value genConversion(mlir::Type, llvm::ArrayRef<mlir::Value>);
162 mlir::Value outlineInWrapper(GeneratorType, llvm::StringRef name,
163 mlir::Type resultType,
164 llvm::ArrayRef<mlir::Value> args);
166 mlir::Type resultType,
170 mlir::FuncOp getWrapper(GeneratorType, llvm::StringRef name,
171 mlir::FunctionType, bool loadRefArguments = false);
176 genElementalCall(GeneratorType, llvm::StringRef name, mlir::Type resultType,
180 mlir::Value invokeGenerator(ElementalGenerator generator,
181 mlir::Type resultType,
182 llvm::ArrayRef<mlir::Value> args);
183 mlir::Value invokeGenerator(RuntimeCallGenerator generator,
184 mlir::Type resultType,
185 llvm::ArrayRef<mlir::Value> args);
186 mlir::Value invokeGenerator(ExtendedGenerator generator,
187 mlir::Type resultType,
188 llvm::ArrayRef<mlir::Value> args);
192 mlir::SymbolRefAttr
194 mlir::FunctionType signature);
197 mlir::Location loc;
299 static mlir::FunctionType genF32F32FuncType(mlir::MLIRContext *context) { in genF32F32FuncType()
300 auto t = mlir::FloatType::getF32(context); in genF32F32FuncType()
301 return mlir::FunctionType::get({t}, {t}, context); in genF32F32FuncType()
304 static mlir::FunctionType genF64F64FuncType(mlir::MLIRContext *context) { in genF64F64FuncType()
305 auto t = mlir::FloatType::getF64(context); in genF64F64FuncType()
306 return mlir::FunctionType::get({t}, {t}, context); in genF64F64FuncType()
310 static mlir::FunctionType genIntF64FuncType(mlir::MLIRContext *context) { in genIntF64FuncType()
311 auto t = mlir::FloatType::getF64(context); in genIntF64FuncType()
312 auto r = mlir::IntegerType::get(Bits, context); in genIntF64FuncType()
313 return mlir::FunctionType::get({t}, {r}, context); in genIntF64FuncType()
317 static mlir::FunctionType genIntF32FuncType(mlir::MLIRContext *context) { in genIntF32FuncType()
318 auto t = mlir::FloatType::getF32(context); in genIntF32FuncType()
319 auto r = mlir::IntegerType::get(Bits, context); in genIntF32FuncType()
320 return mlir::FunctionType::get({t}, {r}, context); in genIntF32FuncType()
369 FunctionDistance(mlir::FunctionType from, mlir::FunctionType to) { in FunctionDistance()
401 void addArgumentDistance(mlir::Type from, mlir::Type to) { in addArgumentDistance()
417 void addResultDistance(mlir::Type from, mlir::Type to) { in addResultDistance()
434 static unsigned getFloatingPointWidth(mlir::Type t) { in getFloatingPointWidth()
435 if (auto f{t.dyn_cast<mlir::FloatType>()}) in getFloatingPointWidth()
447 static Conversion conversionBetweenTypes(mlir::Type from, mlir::Type to) { in conversionBetweenTypes()
451 if (auto fromIntTy{from.dyn_cast<mlir::IntegerType>()}) { in conversionBetweenTypes()
452 if (auto toIntTy{to.dyn_cast<mlir::IntegerType>()}) { in conversionBetweenTypes()
495 static mlir::FuncOp getFuncOp(mlir::Location loc, in getFuncOp()
508 mlir::FuncOp searchFunctionInLibrary( in searchFunctionInLibrary()
509 mlir::Location loc, Fortran::lower::FirOpBuilder &builder, in searchFunctionInLibrary()
511 llvm::StringRef name, mlir::FunctionType funcType, in searchFunctionInLibrary()
535 static mlir::FuncOp getRuntimeFunction(mlir::Location loc, in getRuntimeFunction()
538 mlir::FunctionType funcType) { in getRuntimeFunction()
541 mlir::FuncOp match; in getRuntimeFunction()
582 static mlir::FunctionType
583 getFunctionType(mlir::Type resultType, llvm::ArrayRef<mlir::Value> arguments, in getFunctionType()
585 llvm::SmallVector<mlir::Type, 2> argumentTypes; in getFunctionType()
588 return mlir::FunctionType::get(argumentTypes, resultType, in getFunctionType()
594 fir::ExtendedValue toExtendedValue(mlir::Value val, in toExtendedValue()
596 mlir::Location loc) { in toExtendedValue()
601 llvm::SmallVector<mlir::Value, 2> extents; in toExtendedValue()
622 mlir::emitError(loc, "cannot retrieve array extents from type"); in toExtendedValue()
624 mlir::emitError(loc, "descriptor or derived type not yet handled"); in toExtendedValue()
632 mlir::Value toValue(const fir::ExtendedValue &val, in toValue()
633 Fortran::lower::FirOpBuilder &builder, mlir::Location loc) { in toValue()
653 GeneratorType generator, llvm::StringRef name, mlir::Type resultType, in genElementalCall()
655 llvm::SmallVector<mlir::Value, 2> scalarArgs; in genElementalCall()
661 mlir::emitError(loc, "array or descriptor not yet handled in elemental " in genElementalCall()
676 ExtendedGenerator generator, llvm::StringRef name, mlir::Type resultType, in genElementalCall()
681 mlir::emitError(loc, "array or descriptor not yet handled in elemental " in genElementalCall()
691 IntrinsicLibrary::genIntrinsicCall(llvm::StringRef name, mlir::Type resultType, in genIntrinsicCall()
714 llvm::SmallVector<mlir::Value, 2> mlirArgs; in genIntrinsicCall()
720 mlir::emitError(loc, in genIntrinsicCall()
726 mlir::FunctionType soughtFuncType = in genIntrinsicCall()
734 mlir::Value
736 mlir::Type resultType, in invokeGenerator()
737 llvm::ArrayRef<mlir::Value> args) { in invokeGenerator()
741 mlir::Value
743 mlir::Type resultType, in invokeGenerator()
744 llvm::ArrayRef<mlir::Value> args) { in invokeGenerator()
748 mlir::Value
750 mlir::Type resultType, in invokeGenerator()
751 llvm::ArrayRef<mlir::Value> args) { in invokeGenerator()
760 mlir::FuncOp IntrinsicLibrary::getWrapper(GeneratorType generator, in getWrapper()
762 mlir::FunctionType funcType, in getWrapper()
784 llvm::SmallVector<mlir::Value, 2> localArguments; in getWrapper()
785 for (mlir::BlockArgument bArg : function.front().getArguments()) { in getWrapper()
798 localBuilder->create<mlir::ReturnOp>(localLoc, result); in getWrapper()
808 bool static hasAbsentOptional(llvm::ArrayRef<mlir::Value> args) { in hasAbsentOptional()
822 mlir::Value
824 llvm::StringRef name, mlir::Type resultType, in outlineInWrapper()
825 llvm::ArrayRef<mlir::Value> args) { in outlineInWrapper()
831 mlir::emitError(loc, "todo: cannot outline call to intrinsic " + in outlineInWrapper()
839 return builder.create<mlir::CallOp>(loc, wrapper, args).getResult(0); in outlineInWrapper()
844 llvm::StringRef name, mlir::Type resultType, in outlineInWrapper()
848 mlir::emitError(loc, "todo: cannot outline call to intrinsic " + in outlineInWrapper()
853 llvm::SmallVector<mlir::Value, 2> mlirArgs; in outlineInWrapper()
859 builder.create<mlir::CallOp>(loc, wrapper, mlirArgs).getResult(0); in outlineInWrapper()
865 mlir::FunctionType soughtFuncType) { in getRuntimeCallGenerator()
868 mlir::emitError(loc, in getRuntimeCallGenerator()
874 mlir::FunctionType actualFuncType = funcOp.getType(); in getRuntimeCallGenerator()
880 Fortran::lower::FirOpBuilder &builder, mlir::Location loc, in getRuntimeCallGenerator()
881 llvm::ArrayRef<mlir::Value> args) { in getRuntimeCallGenerator()
882 llvm::SmallVector<mlir::Value, 2> convertedArguments; in getRuntimeCallGenerator()
886 auto call = builder.create<mlir::CallOp>(loc, funcOp, convertedArguments); in getRuntimeCallGenerator()
887 mlir::Type soughtType = soughtFuncType.getResult(0); in getRuntimeCallGenerator()
892 mlir::SymbolRefAttr IntrinsicLibrary::getUnrestrictedIntrinsicSymbolRefAttr( in getUnrestrictedIntrinsicSymbolRefAttr()
893 llvm::StringRef name, mlir::FunctionType signature) { in getUnrestrictedIntrinsicSymbolRefAttr()
899 mlir::FuncOp funcOp; in getUnrestrictedIntrinsicSymbolRefAttr()
909 llvm::SmallVector<mlir::Type, 2> argTypes; in getUnrestrictedIntrinsicSymbolRefAttr()
929 mlir::Value IntrinsicLibrary::genRuntimeCall(llvm::StringRef name, in genRuntimeCall()
930 mlir::Type resultType, in genRuntimeCall()
931 llvm::ArrayRef<mlir::Value> args) { in genRuntimeCall()
932 mlir::FunctionType soughtFuncType = in genRuntimeCall()
937 mlir::Value IntrinsicLibrary::genConversion(mlir::Type resultType, in genConversion()
938 llvm::ArrayRef<mlir::Value> args) { in genConversion()
945 mlir::Value IntrinsicLibrary::genAbs(mlir::Type resultType, in genAbs()
946 llvm::ArrayRef<mlir::Value> args) { in genAbs()
955 if (auto intType = type.dyn_cast<mlir::IntegerType>()) { in genAbs()
960 auto mask = builder.create<mlir::SignedShiftRightOp>(loc, arg, shift); in genAbs()
961 auto xored = builder.create<mlir::XOrOp>(loc, arg, mask); in genAbs()
962 return builder.create<mlir::SubIOp>(loc, xored, mask); in genAbs()
968 llvm::SmallVector<mlir::Value, 2> args = {parts.first, parts.second}; in genAbs()
975 mlir::Value IntrinsicLibrary::genAimag(mlir::Type resultType, in genAimag()
976 llvm::ArrayRef<mlir::Value> args) { in genAimag()
983 mlir::Value IntrinsicLibrary::genAnint(mlir::Type resultType, in genAnint()
984 llvm::ArrayRef<mlir::Value> args) { in genAnint()
992 mlir::Value IntrinsicLibrary::genAint(mlir::Type resultType, in genAint()
993 llvm::ArrayRef<mlir::Value> args) { in genAint()
1001 mlir::Value IntrinsicLibrary::genCeiling(mlir::Type resultType, in genCeiling()
1002 llvm::ArrayRef<mlir::Value> args) { in genCeiling()
1014 mlir::Value IntrinsicLibrary::genConjg(mlir::Type resultType, in genConjg()
1015 llvm::ArrayRef<mlir::Value> args) { in genConjg()
1020 mlir::Value cplx = args[0]; in genConjg()
1030 mlir::Value IntrinsicLibrary::genDim(mlir::Type resultType, in genDim()
1031 llvm::ArrayRef<mlir::Value> args) { in genDim()
1033 if (resultType.isa<mlir::IntegerType>()) { in genDim()
1035 auto diff = builder.create<mlir::SubIOp>(loc, args[0], args[1]); in genDim()
1037 builder.create<mlir::CmpIOp>(loc, mlir::CmpIPredicate::sgt, diff, zero); in genDim()
1038 return builder.create<mlir::SelectOp>(loc, cmp, diff, zero); in genDim()
1044 builder.create<fir::CmpfOp>(loc, mlir::CmpFPredicate::OGT, diff, zero); in genDim()
1045 return builder.create<mlir::SelectOp>(loc, cmp, diff, zero); in genDim()
1049 mlir::Value IntrinsicLibrary::genDprod(mlir::Type resultType, in genDprod()
1050 llvm::ArrayRef<mlir::Value> args) { in genDprod()
1060 mlir::Value IntrinsicLibrary::genFloor(mlir::Type resultType, in genFloor()
1061 llvm::ArrayRef<mlir::Value> args) { in genFloor()
1071 mlir::Value IntrinsicLibrary::genIAnd(mlir::Type resultType, in genIAnd()
1072 llvm::ArrayRef<mlir::Value> args) { in genIAnd()
1075 return builder.create<mlir::AndOp>(loc, args[0], args[1]); in genIAnd()
1079 mlir::Value IntrinsicLibrary::genIchar(mlir::Type resultType, in genIchar()
1080 llvm::ArrayRef<mlir::Value> args) { in genIchar()
1096 mlir::Value IntrinsicLibrary::genIEOr(mlir::Type resultType, in genIEOr()
1097 llvm::ArrayRef<mlir::Value> args) { in genIEOr()
1099 return builder.create<mlir::XOrOp>(loc, args[0], args[1]); in genIEOr()
1103 mlir::Value IntrinsicLibrary::genIOr(mlir::Type resultType, in genIOr()
1104 llvm::ArrayRef<mlir::Value> args) { in genIOr()
1106 return builder.create<mlir::OrOp>(loc, args[0], args[1]); in genIOr()
1114 IntrinsicLibrary::genLen(mlir::Type resultType, in genLen()
1118 mlir::Value len; in genLen()
1133 IntrinsicLibrary::genLenTrim(mlir::Type resultType, in genLenTrim()
1143 mlir::Value IntrinsicLibrary::genMerge(mlir::Type, in genMerge()
1144 llvm::ArrayRef<mlir::Value> args) { in genMerge()
1147 auto i1Type = mlir::IntegerType::get(1, builder.getContext()); in genMerge()
1149 return builder.create<mlir::SelectOp>(loc, mask, args[0], args[1]); in genMerge()
1153 mlir::Value IntrinsicLibrary::genMod(mlir::Type resultType, in genMod()
1154 llvm::ArrayRef<mlir::Value> args) { in genMod()
1156 if (resultType.isa<mlir::IntegerType>()) in genMod()
1157 return builder.create<mlir::SignedRemIOp>(loc, args[0], args[1]); in genMod()
1167 mlir::Value IntrinsicLibrary::genNint(mlir::Type resultType, in genNint()
1168 llvm::ArrayRef<mlir::Value> args) { in genNint()
1176 mlir::Value IntrinsicLibrary::genSign(mlir::Type resultType, in genSign()
1177 llvm::ArrayRef<mlir::Value> args) { in genSign()
1180 if (resultType.isa<mlir::IntegerType>()) { in genSign()
1182 auto neg = builder.create<mlir::SubIOp>(loc, zero, abs); in genSign()
1183 auto cmp = builder.create<mlir::CmpIOp>(loc, mlir::CmpIPredicate::slt, in genSign()
1185 return builder.create<mlir::SelectOp>(loc, cmp, neg, abs); in genSign()
1189 auto zero = builder.create<mlir::ConstantOp>(loc, resultType, zeroAttr); in genSign()
1192 builder.create<fir::CmpfOp>(loc, mlir::CmpFPredicate::OLT, args[1], zero); in genSign()
1193 return builder.create<mlir::SelectOp>(loc, cmp, neg, abs); in genSign()
1198 static mlir::Value createExtremumCompare(mlir::Location loc, in createExtremumCompare()
1200 mlir::Value left, mlir::Value right) { in createExtremumCompare()
1202 ? mlir::CmpIPredicate::sgt in createExtremumCompare()
1203 : mlir::CmpIPredicate::slt; in createExtremumCompare()
1205 ? mlir::CmpFPredicate::OGT in createExtremumCompare()
1206 : mlir::CmpFPredicate::OLT; in createExtremumCompare()
1208 mlir::Value result; in createExtremumCompare()
1218 loc, mlir::CmpFPredicate::UNE, right, right); in createExtremumCompare()
1219 result = builder.create<mlir::OrOp>(loc, leftIsResult, rightIsNan); in createExtremumCompare()
1225 loc, mlir::CmpFPredicate::UNE, left, left); in createExtremumCompare()
1226 result = builder.create<mlir::OrOp>(loc, leftIsResult, leftIsNan); in createExtremumCompare()
1233 ? mlir::CmpFPredicate::UGT in createExtremumCompare()
1234 : mlir::CmpFPredicate::ULT; in createExtremumCompare()
1242 result = builder.create<mlir::CmpIOp>(loc, integerPredicate, left, right); in createExtremumCompare()
1254 mlir::Value IntrinsicLibrary::genExtremum(mlir::Type, in genExtremum()
1255 llvm::ArrayRef<mlir::Value> args) { in genExtremum()
1257 mlir::Value result = args[0]; in genExtremum()
1261 result = builder.create<mlir::SelectOp>(loc, mask, result, arg); in genExtremum()
1272 mlir::Location loc, llvm::StringRef name, in genIntrinsicCall()
1273 mlir::Type resultType, in genIntrinsicCall()
1279 mlir::Value Fortran::lower::genMax(Fortran::lower::FirOpBuilder &builder, in genMax()
1280 mlir::Location loc, in genMax()
1281 llvm::ArrayRef<mlir::Value> args) { in genMax()
1288 mlir::Value Fortran::lower::genMin(Fortran::lower::FirOpBuilder &builder, in genMin()
1289 mlir::Location loc, in genMin()
1290 llvm::ArrayRef<mlir::Value> args) { in genMin()
1297 mlir::Value Fortran::lower::genPow(Fortran::lower::FirOpBuilder &builder, in genPow()
1298 mlir::Location loc, mlir::Type type, in genPow()
1299 mlir::Value x, mlir::Value y) { in genPow()
1303 mlir::SymbolRefAttr Fortran::lower::getUnrestrictedIntrinsicSymbolRefAttr( in getUnrestrictedIntrinsicSymbolRefAttr()
1304 Fortran::lower::FirOpBuilder &builder, mlir::Location loc, in getUnrestrictedIntrinsicSymbolRefAttr()
1305 llvm::StringRef name, mlir::FunctionType signature) { in getUnrestrictedIntrinsicSymbolRefAttr()