Lines Matching refs:builder
134 genFuncDim(FD funcDim, mlir::Type resultType, fir::FirOpBuilder &builder, in genFuncDim() argument
140 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, rank - 1); in genFuncDim()
142 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genFuncDim()
144 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genFuncDim()
148 ? builder.createIntegerConstant(loc, builder.getIndexType(), 0) in genFuncDim()
150 funcDim(builder, loc, resultIrBox, array, dim, mask); in genFuncDim()
153 fir::factory::genMutableBoxRead(builder, loc, resultMutableBox); in genFuncDim()
158 fir::FirOpBuilder *bldr = &builder; in genFuncDim()
167 fir::FirOpBuilder *bldr = &builder; in genFuncDim()
182 fir::FirOpBuilder &builder, mlir::Location loc, in genProdOrSum() argument
189 fir::BoxValue arryTmp = builder.createBox(loc, args[0]); in genProdOrSum()
196 ? builder.create<fir::AbsentOp>( in genProdOrSum()
197 loc, fir::BoxType::get(builder.getI1Type())) in genProdOrSum()
198 : builder.createBox(loc, args[2]); in genProdOrSum()
209 mlir::Value result = builder.createTemporary(loc, eleTy); in genProdOrSum()
210 func(builder, loc, array, mask, result); in genProdOrSum()
211 return builder.create<fir::LoadOp>(loc, result); in genProdOrSum()
213 auto resultBox = builder.create<fir::AbsentOp>( in genProdOrSum()
214 loc, fir::BoxType::get(builder.getI1Type())); in genProdOrSum()
215 return func(builder, loc, array, mask, resultBox); in genProdOrSum()
218 return genFuncDim(funcDim, resultType, builder, loc, stmtCtx, errMsg, array, in genProdOrSum()
225 genDotProd(FN func, mlir::Type resultType, fir::FirOpBuilder &builder, in genDotProd() argument
239 mlir::Value result = builder.createTemporary(loc, eleTy); in genDotProd()
240 func(builder, loc, vectorA, vectorB, result); in genDotProd()
241 return builder.create<fir::LoadOp>(loc, result); in genDotProd()
244 auto resultBox = builder.create<fir::AbsentOp>( in genDotProd()
245 loc, fir::BoxType::get(builder.getI1Type())); in genDotProd()
246 return func(builder, loc, vectorA, vectorB, resultBox); in genDotProd()
253 fir::FirOpBuilder &builder, mlir::Location loc, in genExtremumVal() argument
261 fir::BoxValue arryTmp = builder.createBox(loc, args[0]); in genExtremumVal()
269 ? builder.create<fir::AbsentOp>( in genExtremumVal()
270 loc, fir::BoxType::get(builder.getI1Type())) in genExtremumVal()
271 : builder.createBox(loc, args[2]); in genExtremumVal()
278 return func(builder, loc, array, mask); in genExtremumVal()
283 fir::factory::createTempMutableBox(builder, loc, resultType); in genExtremumVal()
285 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genExtremumVal()
287 funcChar(builder, loc, resultIrBox, array, mask); in genExtremumVal()
291 fir::factory::genMutableBoxRead(builder, loc, resultMutableBox); in genExtremumVal()
296 fir::FirOpBuilder *bldr = &builder; in genExtremumVal()
308 return genFuncDim(funcDim, resultType, builder, loc, stmtCtx, errMsg, array, in genExtremumVal()
315 FN func, FD funcDim, mlir::Type resultType, fir::FirOpBuilder &builder, in genExtremumloc() argument
322 mlir::Value array = builder.createBox(loc, args[0]); in genExtremumloc()
328 ? builder.create<fir::AbsentOp>( in genExtremumloc()
329 loc, fir::BoxType::get(builder.getI1Type())) in genExtremumloc()
330 : builder.createBox(loc, args[2]); in genExtremumloc()
334 ? builder.createIntegerConstant( in genExtremumloc()
335 loc, builder.getIndexType(), in genExtremumloc()
336 builder.getKindMap().defaultIntegerKind()) in genExtremumloc()
340 auto back = isStaticallyAbsent(args[4]) ? builder.createBool(loc, false) in genExtremumloc()
352 fir::factory::createTempMutableBox(builder, loc, resultType); in genExtremumloc()
354 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genExtremumloc()
356 funcDim(builder, loc, resultIrBox, array, dim, mask, kind, back); in genExtremumloc()
360 fir::factory::genMutableBoxRead(builder, loc, resultMutableBox); in genExtremumloc()
365 fir::FirOpBuilder *bldr = &builder; in genExtremumloc()
368 return builder.create<fir::LoadOp>(loc, resultType, tempAddr); in genExtremumloc()
379 builder.getVarLenSeqTy(resultType, absentDim ? 1 : rank - 1); in genExtremumloc()
381 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genExtremumloc()
383 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genExtremumloc()
388 func(builder, loc, resultIrBox, array, mask, kind, back); in genExtremumloc()
393 funcDim(builder, loc, resultIrBox, array, dim, mask, kind, back); in genExtremumloc()
396 return fir::factory::genMutableBoxRead(builder, loc, resultMutableBox) in genExtremumloc()
401 fir::FirOpBuilder *bldr = &builder; in genExtremumloc()
416 explicit IntrinsicLibrary(fir::FirOpBuilder &builder, mlir::Location loc, in IntrinsicLibrary()
418 : builder{builder}, loc{loc}, stmtCtx{stmtCtx} {} in IntrinsicLibrary()
636 fir::FirOpBuilder &builder; member
1142 static mlir::Value genLibCall(fir::FirOpBuilder &builder, mlir::Location loc, in genLibCall() argument
1150 builder.addNamedFunction(loc, libFuncName, libFuncType); in genLibCall()
1155 auto libCall = builder.create<fir::CallOp>(loc, funcOp, args); in genLibCall()
1161 static mlir::Value genMathOp(fir::FirOpBuilder &builder, mlir::Location loc, in genMathOp() argument
1186 result = genLibCall(builder, loc, mathLibFuncName, mathLibFuncType, args); in genMathOp()
1191 result = builder.create<T>(loc, args); in genMathOp()
1415 fir::FirOpBuilder &builder, in getFuncOp() argument
1417 mlir::func::FuncOp function = builder.addNamedFunction( in getFuncOp()
1418 loc, runtime.symbol, runtime.typeGenerator(builder.getContext())); in getFuncOp()
1419 function->setAttr("fir.runtime", builder.getUnitAttr()); in getFuncOp()
1428 mlir::Location loc, fir::FirOpBuilder &builder, in searchFunctionInLibrary() argument
1437 mlir::FunctionType implType = impl.typeGenerator(builder.getContext()); in searchFunctionInLibrary()
1439 return getFuncOp(loc, builder, impl); // exact match in searchFunctionInLibrary()
1466 searchMathOperation(fir::FirOpBuilder &builder, llvm::StringRef name, in searchMathOperation() argument
1473 auto implType = impl.typeGenerator(builder.getContext()); in searchMathOperation()
1526 fir::FirOpBuilder &builder, in getRuntimeFunction() argument
1541 match = searchFunctionInLibrary(loc, builder, pgmathF, name, funcType, in getRuntimeFunction()
1544 match = searchFunctionInLibrary(loc, builder, pgmathR, name, funcType, in getRuntimeFunction()
1547 match = searchFunctionInLibrary(loc, builder, pgmathP, name, funcType, in getRuntimeFunction()
1558 fir::FirOpBuilder &builder) { in getFunctionType() argument
1565 return mlir::FunctionType::get(builder.getModule().getContext(), argTypes, in getFunctionType()
1571 fir::ExtendedValue toExtendedValue(mlir::Value val, fir::FirOpBuilder &builder, in toExtendedValue() argument
1576 mlir::IndexType indexType = builder.getIndexType(); in toExtendedValue()
1579 fir::factory::CharacterExprHelper charHelper{builder, loc}; in toExtendedValue()
1593 builder.createIntegerConstant(loc, indexType, extent)); in toExtendedValue()
1609 mlir::Value toValue(const fir::ExtendedValue &val, fir::FirOpBuilder &builder, in toValue() argument
1619 return fir::factory::CharacterExprHelper{builder, loc}.createEmboxChar( in toValue()
1774 mlir::Value val = toValue(extendedVal, builder, loc); in genIntrinsicCall()
1782 getFunctionType(*resultType, mlirArgs, builder); in genIntrinsicCall()
1801 return generator(builder, loc, args); in invokeGenerator()
1810 extendedArgs.emplace_back(toExtendedValue(arg, builder, loc)); in invokeGenerator()
1812 return toValue(extendedResult, builder, loc); in invokeGenerator()
1820 extendedArgs.emplace_back(toExtendedValue(arg, builder, loc)); in invokeGenerator()
1831 mlir::func::FuncOp function = builder.getNamedFunction(wrapperName); in getWrapper()
1834 function = builder.createFunction(loc, wrapperName, funcType); in getWrapper()
1835 function->setAttr("fir.intrinsic", builder.getUnitAttr()); in getWrapper()
1838 mlir::LLVM::LinkageAttr::get(builder.getContext(), internalLinkage); in getWrapper()
1846 std::make_unique<fir::FirOpBuilder>(function, builder.getKindMap()); in getWrapper()
1911 mlir::FunctionType funcType = getFunctionType(resultType, args, builder); in outlineInWrapper()
1913 return builder.create<fir::CallOp>(loc, wrapper, args).getResult(0); in outlineInWrapper()
1926 mlirArgs.emplace_back(toValue(extendedVal, builder, loc)); in outlineInExtendedWrapper()
1927 mlir::FunctionType funcType = getFunctionType(resultType, mlirArgs, builder); in outlineInExtendedWrapper()
1929 auto call = builder.create<fir::CallOp>(loc, wrapper, mlirArgs); in outlineInExtendedWrapper()
1931 return toExtendedValue(call.getResult(0), builder, loc); in outlineInExtendedWrapper()
1949 mathOp = searchMathOperation(builder, name, soughtFuncType, &bestNearMatch, in getRuntimeCallGenerator()
1971 actualFuncType = mathOp->typeGenerator(builder.getContext()); in getRuntimeCallGenerator()
1974 if ((funcOp = getRuntimeFunction(loc, builder, name, soughtFuncType))) in getRuntimeCallGenerator()
1989 soughtFuncType](fir::FirOpBuilder &builder, mlir::Location loc, in getRuntimeCallGenerator()
1993 convertedArguments.push_back(builder.createConvert(loc, fst, snd)); in getRuntimeCallGenerator()
1997 result = mathOp->funcGenerator(builder, loc, mathOp->runtimeFunc, in getRuntimeCallGenerator()
2000 result = builder.create<fir::CallOp>(loc, funcOp, convertedArguments) in getRuntimeCallGenerator()
2003 return builder.createConvert(loc, soughtType, result); in getRuntimeCallGenerator()
2031 builder.getFunctionType(argTypes, signature.getResults()); in getUnrestrictedIntrinsicSymbolRefAttr()
2042 fir::FirOpBuilder *bldr = &builder; in addCleanUpForTemp()
2051 fir::factory::genMutableBoxRead(builder, loc, resultMutableBox); in readAndAddCleanUp()
2061 builder.create<fir::BoxAddrOp>(loc, box.getMemTy(), box.getAddr()); in readAndAddCleanUp()
2073 return builder.create<fir::LoadOp>(loc, resultType, tempAddr); in readAndAddCleanUp()
2093 getFunctionType(resultType, args, builder); in genRuntimeCall()
2094 return getRuntimeCallGenerator(name, soughtFuncType)(builder, loc, args); in genRuntimeCall()
2101 return builder.convertWithSemantics(loc, resultType, args[0]); in genConversion()
2119 builder.createIntegerConstant(loc, intType, intType.getWidth() - 1); in genAbs()
2120 auto mask = builder.create<mlir::arith::ShRSIOp>(loc, arg, shift); in genAbs()
2121 auto xored = builder.create<mlir::arith::XOrIOp>(loc, arg, mask); in genAbs()
2122 return builder.create<mlir::arith::SubIOp>(loc, xored, mask); in genAbs()
2126 auto parts = fir::factory::Complex{builder, loc}.extractParts(arg); in genAbs()
2140 mlir::Value string = builder.createBox(loc, args[0]); in genAdjustRtCall()
2143 fir::factory::createTempMutableBox(builder, loc, resultType); in genAdjustRtCall()
2145 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genAdjustRtCall()
2148 CallRuntime(builder, loc, resultIrBox, string); in genAdjustRtCall()
2153 fir::factory::genMutableBoxRead(builder, loc, resultMutableBox); in genAdjustRtCall()
2168 return fir::factory::Complex{builder, loc}.extractComplexPart( in genAimag()
2188 mlir::Value mask = builder.createBox(loc, args[0]); in genAll()
2190 fir::BoxValue maskArry = builder.createBox(loc, args[0]); in genAll()
2197 absentDim ? builder.createIntegerConstant(loc, builder.getIndexType(), 1) in genAll()
2201 return builder.createConvert(loc, resultType, in genAll()
2202 fir::runtime::genAll(builder, loc, mask, dim)); in genAll()
2208 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, rank - 1); in genAll()
2210 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genAll()
2212 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genAll()
2215 fir::runtime::genAllDescriptor(builder, loc, resultIrBox, mask, dim); in genAll()
2216 return fir::factory::genMutableBoxRead(builder, loc, resultMutableBox) in genAll()
2234 return fir::factory::genIsAllocatedOrAssociatedTest(builder, loc, x); in genAllocated()
2258 mlir::Value mask = builder.createBox(loc, args[0]); in genAny()
2260 fir::BoxValue maskArry = builder.createBox(loc, args[0]); in genAny()
2267 absentDim ? builder.createIntegerConstant(loc, builder.getIndexType(), 1) in genAny()
2271 return builder.createConvert(loc, resultType, in genAny()
2272 fir::runtime::genAny(builder, loc, mask, dim)); in genAny()
2278 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, rank - 1); in genAny()
2280 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genAny()
2282 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genAny()
2285 fir::runtime::genAnyDescriptor(builder, loc, resultIrBox, mask, dim); in genAny()
2286 return fir::factory::genMutableBoxRead(builder, loc, resultMutableBox) in genAny()
2309 return fir::factory::genIsAllocatedOrAssociatedTest(builder, loc, *pointer); in genAssociated()
2311 mlir::Value targetBox = builder.createBox(loc, target); in genAssociated()
2323 auto isPresent = builder.create<fir::IsPresentOp>(loc, builder.getI1Type(), in genAssociated()
2325 auto absentBox = builder.create<fir::AbsentOp>(loc, targetBox.getType()); in genAssociated()
2326 targetBox = builder.create<mlir::arith::SelectOp>(loc, isPresent, targetBox, in genAssociated()
2330 fir::factory::getMutableIRBox(builder, loc, *pointer); in genAssociated()
2331 auto pointerBox = builder.create<fir::LoadOp>(loc, pointerBoxRef); in genAssociated()
2332 return Fortran::lower::genAssociated(builder, loc, pointerBox, targetBox); in genAssociated()
2361 arg1 = builder.create<mlir::arith::ExtUIOp>(loc, arg0Ty, arg1); in genBitwiseCompare()
2363 arg0 = builder.create<mlir::arith::ExtUIOp>(loc, arg1Ty, arg0); in genBitwiseCompare()
2365 return builder.create<mlir::arith::CmpIOp>(loc, pred, arg0, arg1); in genBitwiseCompare()
2377 mlir::Value pos = builder.createConvert(loc, argType, args[1]); in genBtest()
2378 auto shift = builder.create<mlir::arith::ShRUIOp>(loc, args[0], pos); in genBtest()
2379 mlir::Value one = builder.createIntegerConstant(loc, argType, 1); in genBtest()
2380 auto res = builder.create<mlir::arith::AndIOp>(loc, shift, one); in genBtest()
2381 return builder.createConvert(loc, resultType, res); in genBtest()
2394 return builder.createConvert(loc, resultType, ceil); in genCeiling()
2407 fir::factory::CharacterExprHelper helper{builder, loc}; in genChar()
2411 builder.createIntegerConstant(loc, builder.getCharacterLengthType(), 1); in genChar()
2419 fir::factory::Complex complexHelper(builder, loc); in genCmplx()
2421 mlir::Value real = builder.createConvert(loc, partType, args[0]); in genCmplx()
2423 ? builder.createRealZeroConstant(loc, partType) in genCmplx()
2424 : builder.createConvert(loc, partType, args[1]); in genCmplx()
2425 return fir::factory::Complex{builder, loc}.createComplex(resultType, real, in genCmplx()
2433 assert(resultType == builder.getDefaultIntegerType() && in genCommandArgumentCount()
2435 return builder.createConvert( in genCommandArgumentCount()
2436 loc, resultType, fir::runtime::genCommandArgumentCount(builder, loc)); in genCommandArgumentCount()
2448 auto imag = fir::factory::Complex{builder, loc}.extractComplexPart( in genConjg()
2450 auto negImag = builder.create<mlir::arith::NegFOp>(loc, imag); in genConjg()
2451 return fir::factory::Complex{builder, loc}.insertComplexPart( in genConjg()
2462 fir::BoxValue mask = builder.createBox(loc, args[0]); in genCount()
2470 absentDim ? builder.createIntegerConstant(loc, builder.getIndexType(), 0) in genCount()
2476 return builder.createConvert( in genCount()
2478 fir::runtime::genCount(builder, loc, fir::getBase(mask), dim)); in genCount()
2485 mlir::Value kind = absentKind ? builder.createIntegerConstant( in genCount()
2486 loc, builder.getIndexType(), in genCount()
2487 builder.getKindMap().defaultIntegerKind()) in genCount()
2491 mlir::Type type = builder.getVarLenSeqTy(resultType, maskRank - 1); in genCount()
2493 fir::factory::createTempMutableBox(builder, loc, type); in genCount()
2496 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genCount()
2498 fir::runtime::genCountDim(builder, loc, resultIrBox, fir::getBase(mask), dim, in genCount()
2503 fir::factory::genMutableBoxRead(builder, loc, resultMutableBox); in genCount()
2520 mlir::Value res1 = Fortran::lower::genCpuTime(builder, loc); in genCpuTime()
2522 builder.createConvert(loc, fir::dyn_cast_ptrEleTy(arg->getType()), res1); in genCpuTime()
2523 builder.create<fir::StoreOp>(loc, res2, *arg); in genCpuTime()
2533 fir::BoxValue arrayBox = builder.createBox(loc, args[0]); in genCshift()
2538 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, arrayRank); in genCshift()
2540 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genCshift()
2542 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genCshift()
2549 auto shift = builder.create<fir::LoadOp>(loc, *shiftAddr); in genCshift()
2551 fir::runtime::genCshiftVector(builder, loc, resultIrBox, array, shift); in genCshift()
2555 mlir::Value shift = builder.createBox(loc, args[1]); in genCshift()
2560 ? builder.createIntegerConstant(loc, builder.getIndexType(), 1) in genCshift()
2562 fir::runtime::genCshift(builder, loc, resultIrBox, array, shift, dim); in genCshift()
2577 values = builder.create<fir::AbsentOp>( in genDateAndTime()
2578 loc, fir::BoxType::get(builder.getNoneType())); in genDateAndTime()
2580 Fortran::lower::genDateAndTime(builder, loc, charArgs[0], charArgs[1], in genDateAndTime()
2589 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genDim()
2590 auto diff = builder.create<mlir::arith::SubIOp>(loc, args[0], args[1]); in genDim()
2591 auto cmp = builder.create<mlir::arith::CmpIOp>( in genDim()
2593 return builder.create<mlir::arith::SelectOp>(loc, cmp, diff, zero); in genDim()
2596 mlir::Value zero = builder.createRealZeroConstant(loc, resultType); in genDim()
2597 auto diff = builder.create<mlir::arith::SubFOp>(loc, args[0], args[1]); in genDim()
2598 auto cmp = builder.create<mlir::arith::CmpFOp>( in genDim()
2600 return builder.create<mlir::arith::SelectOp>(loc, cmp, diff, zero); in genDim()
2607 return genDotProd(fir::runtime::genDotProduct, resultType, builder, loc, in genDotProduct()
2617 mlir::Value a = builder.createConvert(loc, resultType, args[0]); in genDprod()
2618 mlir::Value b = builder.createConvert(loc, resultType, args[1]); in genDprod()
2619 return builder.create<mlir::arith::MulFOp>(loc, a, b); in genDprod()
2629 mlir::Value shift = builder.createConvert(loc, resultType, args[2]); in genDshiftl()
2630 mlir::Value bitSize = builder.createIntegerConstant( in genDshiftl()
2635 mlir::Value diff = builder.create<mlir::arith::SubIOp>(loc, bitSize, shift); in genDshiftl()
2643 return builder.create<mlir::arith::OrIOp>(loc, lft, rgt); in genDshiftl()
2653 mlir::Value shift = builder.createConvert(loc, resultType, args[2]); in genDshiftr()
2654 mlir::Value bitSize = builder.createIntegerConstant( in genDshiftr()
2659 mlir::Value diff = builder.create<mlir::arith::SubIOp>(loc, bitSize, shift); in genDshiftr()
2667 return builder.create<mlir::arith::OrIOp>(loc, lft, rgt); in genDshiftr()
2677 fir::BoxValue arrayBox = builder.createBox(loc, args[0]); in genEoshift()
2682 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, arrayRank); in genEoshift()
2684 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genEoshift()
2686 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genEoshift()
2691 ? builder.create<fir::AbsentOp>( in genEoshift()
2692 loc, fir::BoxType::get(builder.getNoneType())) in genEoshift()
2693 : builder.createBox(loc, args[2]); in genEoshift()
2700 auto shift = builder.create<fir::LoadOp>(loc, *shiftAddr); in genEoshift()
2701 fir::runtime::genEoshiftVector(builder, loc, resultIrBox, array, shift, in genEoshift()
2706 mlir::Value shift = builder.createBox(loc, args[1]); in genEoshift()
2711 ? builder.createIntegerConstant(loc, builder.getIndexType(), 1) in genEoshift()
2713 fir::runtime::genEoshift(builder, loc, resultIrBox, array, shift, boundary, in genEoshift()
2726 ? builder.createIntegerConstant(loc, builder.getDefaultIntegerType(), in genExit()
2730 assert(status.getType() == builder.getDefaultIntegerType() && in genExit()
2733 fir::runtime::genExit(builder, loc, status); in genExit()
2741 return builder.createConvert( in genExponent()
2743 fir::runtime::genExponent(builder, loc, resultType, in genExponent()
2755 return builder.createConvert(loc, resultType, floor); in genFloor()
2763 return builder.createConvert( in genFraction()
2765 fir::runtime::genFraction(builder, loc, fir::getBase(args[0]))); in genFraction()
2783 mlir::Type boxNoneTy = fir::BoxType::get(builder.getNoneType()); in genGetCommandArgument()
2787 : builder.create<fir::AbsentOp>(loc, boxNoneTy).getResult(); in genGetCommandArgument()
2791 : builder.create<fir::AbsentOp>(loc, boxNoneTy).getResult(); in genGetCommandArgument()
2793 fir::runtime::genArgumentValue(builder, loc, number, valBox, errBox); in genGetCommandArgument()
2797 builder.genIsNotNullAddr(loc, statAddr); in genGetCommandArgument()
2798 builder.genIfThen(loc, statIsPresentAtRuntime) in genGetCommandArgument()
2800 [&]() { builder.createStoreWithConvert(loc, stat, statAddr); }) in genGetCommandArgument()
2806 mlir::Value lenIsPresentAtRuntime = builder.genIsNotNullAddr(loc, lenAddr); in genGetCommandArgument()
2807 builder.genIfThen(loc, lenIsPresentAtRuntime) in genGetCommandArgument()
2810 fir::runtime::genArgumentLength(builder, loc, number); in genGetCommandArgument()
2811 builder.createStoreWithConvert(loc, len, lenAddr); in genGetCommandArgument()
2831 trim = builder.createBool(loc, true); in genGetEnvironmentVariable()
2833 mlir::Type i1Ty = builder.getI1Type(); in genGetEnvironmentVariable()
2836 builder.genIsNotNullAddr(loc, trimNameAddr); in genGetEnvironmentVariable()
2837 trim = builder in genGetEnvironmentVariable()
2841 auto trimLoad = builder.create<fir::LoadOp>(loc, trimNameAddr); in genGetEnvironmentVariable()
2842 mlir::Value cast = builder.createConvert(loc, i1Ty, trimLoad); in genGetEnvironmentVariable()
2843 builder.create<fir::ResultOp>(loc, cast); in genGetEnvironmentVariable()
2846 mlir::Value trueVal = builder.createBool(loc, true); in genGetEnvironmentVariable()
2847 builder.create<fir::ResultOp>(loc, trueVal); in genGetEnvironmentVariable()
2854 mlir::Type boxNoneTy = fir::BoxType::get(builder.getNoneType()); in genGetEnvironmentVariable()
2858 : builder.create<fir::AbsentOp>(loc, boxNoneTy).getResult(); in genGetEnvironmentVariable()
2862 : builder.create<fir::AbsentOp>(loc, boxNoneTy).getResult(); in genGetEnvironmentVariable()
2863 mlir::Value stat = fir::runtime::genEnvVariableValue(builder, loc, name, in genGetEnvironmentVariable()
2868 builder.genIsNotNullAddr(loc, statAddr); in genGetEnvironmentVariable()
2869 builder.genIfThen(loc, statIsPresentAtRuntime) in genGetEnvironmentVariable()
2871 [&]() { builder.createStoreWithConvert(loc, stat, statAddr); }) in genGetEnvironmentVariable()
2878 mlir::Value lenIsPresentAtRuntime = builder.genIsNotNullAddr(loc, lenAddr); in genGetEnvironmentVariable()
2879 builder.genIfThen(loc, lenIsPresentAtRuntime) in genGetEnvironmentVariable()
2882 fir::runtime::genEnvVariableLength(builder, loc, name, trim); in genGetEnvironmentVariable()
2883 builder.createStoreWithConvert(loc, len, lenAddr); in genGetEnvironmentVariable()
2893 auto arg0 = builder.createConvert(loc, resultType, args[0]); in genIand()
2894 auto arg1 = builder.createConvert(loc, resultType, args[1]); in genIand()
2895 return builder.create<mlir::arith::AndIOp>(loc, arg0, arg1); in genIand()
2906 mlir::Value pos = builder.createConvert(loc, resultType, args[1]); in genIbclr()
2907 mlir::Value one = builder.createIntegerConstant(loc, resultType, 1); in genIbclr()
2908 mlir::Value ones = builder.createIntegerConstant(loc, resultType, -1); in genIbclr()
2909 auto mask = builder.create<mlir::arith::ShLIOp>(loc, one, pos); in genIbclr()
2910 auto res = builder.create<mlir::arith::XOrIOp>(loc, ones, mask); in genIbclr()
2911 return builder.create<mlir::arith::AndIOp>(loc, args[0], res); in genIbclr()
2926 mlir::Value pos = builder.createConvert(loc, resultType, args[1]); in genIbits()
2927 mlir::Value len = builder.createConvert(loc, resultType, args[2]); in genIbits()
2928 mlir::Value bitSize = builder.createIntegerConstant( in genIbits()
2930 auto shiftCount = builder.create<mlir::arith::SubIOp>(loc, bitSize, len); in genIbits()
2931 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genIbits()
2932 mlir::Value ones = builder.createIntegerConstant(loc, resultType, -1); in genIbits()
2933 auto mask = builder.create<mlir::arith::ShRUIOp>(loc, ones, shiftCount); in genIbits()
2934 auto res1 = builder.create<mlir::arith::ShRSIOp>(loc, args[0], pos); in genIbits()
2935 auto res2 = builder.create<mlir::arith::AndIOp>(loc, res1, mask); in genIbits()
2936 auto lenIsZero = builder.create<mlir::arith::CmpIOp>( in genIbits()
2938 return builder.create<mlir::arith::SelectOp>(loc, lenIsZero, zero, res2); in genIbits()
2949 mlir::Value pos = builder.createConvert(loc, resultType, args[1]); in genIbset()
2950 mlir::Value one = builder.createIntegerConstant(loc, resultType, 1); in genIbset()
2951 auto mask = builder.create<mlir::arith::ShLIOp>(loc, one, pos); in genIbset()
2952 return builder.create<mlir::arith::OrIOp>(loc, args[0], mask); in genIbset()
2965 fir::factory::CharacterExprHelper helper{builder, loc}; in genIchar()
2981 fir::CharacterType::get(builder.getContext(), eleType.getFKind(), 1); in genIchar()
2982 mlir::Type toTy = builder.getRefType(charType); in genIchar()
2983 mlir::Value cast = builder.createConvert(loc, toTy, buffer); in genIchar()
2984 charVal = builder.create<fir::LoadOp>(loc, cast); in genIchar()
2990 return builder.create<mlir::arith::ExtUIOp>(loc, resultType, code); in genIchar()
3007 mlir::Value field = builder.create<fir::FieldIndexOp>( in genIeeeTypeCompare()
3009 mlir::Value left = builder.create<fir::LoadOp>( in genIeeeTypeCompare()
3011 builder.create<fir::CoordinateOp>(loc, builder.getRefType(fieldType), in genIeeeTypeCompare()
3013 mlir::Value right = builder.create<fir::LoadOp>( in genIeeeTypeCompare()
3015 builder.create<fir::CoordinateOp>(loc, builder.getRefType(fieldType), in genIeeeTypeCompare()
3017 return builder.create<mlir::arith::CmpIOp>(loc, pred, left, right); in genIeeeTypeCompare()
3029 mlir::Type intType = builder.getIntegerType( in genIeeeIsFinite()
3032 builder.create<mlir::arith::BitcastOp>(loc, intType, floatVal); in genIeeeIsFinite()
3041 builder.createIntegerConstant(loc, intType, significandBits); in genIeeeIsFinite()
3044 builder.createIntegerConstant(loc, intType, (1 << exponentBits) - 1); in genIeeeIsFinite()
3047 builder.createIntegerConstant(loc, intType, exponentBits)}); in genIeeeIsFinite()
3048 return builder.createConvert( in genIeeeIsFinite()
3050 builder.create<mlir::arith::CmpIOp>(loc, mlir::arith::CmpIPredicate::ne, in genIeeeIsFinite()
3058 return builder.create<mlir::arith::XOrIOp>(loc, args[0], args[1]); in genIeor()
3069 fir::factory::CharacterExprHelper{builder, loc}.getCharacterKind( in genIndex()
3076 ? builder.createIntegerConstant(loc, builder.getI1Type(), 0) in genIndex()
3079 return builder.createConvert( in genIndex()
3081 fir::runtime::genIndex(builder, loc, kind, stringBase, stringLen, in genIndex()
3085 mlir::Value string = builder.createBox(loc, args[0]); in genIndex()
3086 mlir::Value substring = builder.createBox(loc, args[1]); in genIndex()
3089 builder.getContext(), builder.getKindMap().defaultLogicalKind()); in genIndex()
3090 mlir::Value temp = builder.createTemporary(loc, logTy); in genIndex()
3091 mlir::Value castb = builder.createConvert(loc, logTy, b); in genIndex()
3092 builder.create<fir::StoreOp>(loc, castb, temp); in genIndex()
3093 return builder.createBox(loc, temp); in genIndex()
3096 ? builder.create<fir::AbsentOp>( in genIndex()
3097 loc, fir::BoxType::get(builder.getI1Type())) in genIndex()
3100 ? builder.createIntegerConstant( in genIndex()
3101 loc, builder.getIndexType(), in genIndex()
3102 builder.getKindMap().defaultIntegerKind()) in genIndex()
3106 fir::factory::createTempMutableBox(builder, loc, resultType); in genIndex()
3107 mlir::Value resBox = fir::factory::getMutableIRBox(builder, loc, mutBox); in genIndex()
3109 fir::runtime::genIndexDescriptor(builder, loc, resBox, string, substring, in genIndex()
3119 return builder.create<mlir::arith::OrIOp>(loc, args[0], args[1]); in genIor()
3133 mlir::Value bitSize = builder.createIntegerConstant( in genIshft()
3135 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genIshft()
3136 mlir::Value shift = builder.createConvert(loc, resultType, args[1]); in genIshft()
3138 auto left = builder.create<mlir::arith::ShLIOp>(loc, args[0], absShift); in genIshft()
3139 auto right = builder.create<mlir::arith::ShRUIOp>(loc, args[0], absShift); in genIshft()
3140 auto shiftIsLarge = builder.create<mlir::arith::CmpIOp>( in genIshft()
3142 auto shiftIsNegative = builder.create<mlir::arith::CmpIOp>( in genIshft()
3145 builder.create<mlir::arith::SelectOp>(loc, shiftIsNegative, right, left); in genIshft()
3146 return builder.create<mlir::arith::SelectOp>(loc, shiftIsLarge, zero, sel); in genIshft()
3169 mlir::Value bitSize = builder.createIntegerConstant( in genIshftc()
3172 mlir::Value shift = builder.createConvert(loc, resultType, args[1]); in genIshftc()
3174 args[2] ? builder.createConvert(loc, resultType, args[2]) : bitSize; in genIshftc()
3175 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genIshftc()
3176 mlir::Value ones = builder.createIntegerConstant(loc, resultType, -1); in genIshftc()
3178 auto elseSize = builder.create<mlir::arith::SubIOp>(loc, size, absShift); in genIshftc()
3179 auto shiftIsZero = builder.create<mlir::arith::CmpIOp>( in genIshftc()
3181 auto shiftEqualsSize = builder.create<mlir::arith::CmpIOp>( in genIshftc()
3184 builder.create<mlir::arith::OrIOp>(loc, shiftIsZero, shiftEqualsSize); in genIshftc()
3185 auto shiftIsPositive = builder.create<mlir::arith::CmpIOp>( in genIshftc()
3187 auto leftSize = builder.create<mlir::arith::SelectOp>(loc, shiftIsPositive, in genIshftc()
3189 auto rightSize = builder.create<mlir::arith::SelectOp>(loc, shiftIsPositive, in genIshftc()
3191 auto hasUnchanged = builder.create<mlir::arith::CmpIOp>( in genIshftc()
3193 auto unchangedTmp1 = builder.create<mlir::arith::ShRUIOp>(loc, I, size); in genIshftc()
3195 builder.create<mlir::arith::ShLIOp>(loc, unchangedTmp1, size); in genIshftc()
3196 auto unchanged = builder.create<mlir::arith::SelectOp>(loc, hasUnchanged, in genIshftc()
3199 builder.create<mlir::arith::SubIOp>(loc, bitSize, leftSize); in genIshftc()
3201 builder.create<mlir::arith::ShRUIOp>(loc, ones, leftMaskShift); in genIshftc()
3202 auto leftTmp = builder.create<mlir::arith::ShRUIOp>(loc, I, rightSize); in genIshftc()
3203 auto left = builder.create<mlir::arith::AndIOp>(loc, leftTmp, leftMask); in genIshftc()
3205 builder.create<mlir::arith::SubIOp>(loc, bitSize, rightSize); in genIshftc()
3207 builder.create<mlir::arith::ShRUIOp>(loc, ones, rightMaskShift); in genIshftc()
3208 auto rightTmp = builder.create<mlir::arith::AndIOp>(loc, I, rightMask); in genIshftc()
3209 auto right = builder.create<mlir::arith::ShLIOp>(loc, rightTmp, leftSize); in genIshftc()
3210 auto resTmp = builder.create<mlir::arith::OrIOp>(loc, unchanged, left); in genIshftc()
3211 auto res = builder.create<mlir::arith::OrIOp>(loc, resTmp, right); in genIshftc()
3212 return builder.create<mlir::arith::SelectOp>(loc, shiftIsNop, I, res); in genIshftc()
3221 builder.create<mlir::math::CountLeadingZerosOp>(loc, args); in genLeadz()
3223 return builder.createConvert(loc, resultType, result); in genLeadz()
3234 mlir::Value len = fir::factory::readCharLen(builder, loc, args[0]); in genLen()
3235 return builder.createConvert(loc, resultType, len); in genLen()
3248 fir::factory::CharacterExprHelper(builder, loc).createLenTrim(*charBox); in genLenTrim()
3249 return builder.createConvert(loc, resultType, len); in genLenTrim()
3259 builder, loc, pred, fir::getBase(args[0]), fir::getLen(args[0]), in genCharacterCompare()
3269 mlir::Value ones = builder.createIntegerConstant(loc, resultType, -1); in genMask()
3270 mlir::Value bitSize = builder.createIntegerConstant( in genMask()
3272 mlir::Value bitsToSet = builder.createConvert(loc, resultType, args[0]); in genMask()
3280 builder.create<mlir::arith::SubIOp>(loc, bitSize, bitsToSet); in genMask()
3281 return builder.create<Shift>(loc, ones, shift); in genMask()
3291 fir::BoxValue matrixTmpA = builder.createBox(loc, args[0]); in genMatmul()
3293 fir::BoxValue matrixTmpB = builder.createBox(loc, args[1]); in genMatmul()
3299 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, resultRank); in genMatmul()
3301 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genMatmul()
3303 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genMatmul()
3305 fir::runtime::genMatmul(builder, loc, resultIrBox, matrixA, matrixB); in genMatmul()
3322 mlir::Value mask = builder.createConvert(loc, builder.getI1Type(), rawMask); in genMerge()
3328 builder.createConvert(loc, tsource.getType(), fsource); in genMerge()
3330 builder.create<mlir::arith::SelectOp>(loc, mask, tsource, fsourceCast); in genMerge()
3345 mlir::Value i = builder.createConvert(loc, resultType, args[0]); in genMergeBits()
3346 mlir::Value j = builder.createConvert(loc, resultType, args[1]); in genMergeBits()
3347 mlir::Value mask = builder.createConvert(loc, resultType, args[2]); in genMergeBits()
3348 mlir::Value ones = builder.createIntegerConstant(loc, resultType, -1); in genMergeBits()
3351 mlir::Value notMask = builder.create<mlir::arith::XOrIOp>(loc, mask, ones); in genMergeBits()
3352 mlir::Value lft = builder.create<mlir::arith::AndIOp>(loc, i, mask); in genMergeBits()
3353 mlir::Value rgt = builder.create<mlir::arith::AndIOp>(loc, j, notMask); in genMergeBits()
3355 return builder.create<mlir::arith::OrIOp>(loc, lft, rgt); in genMergeBits()
3363 return builder.create<mlir::arith::RemSIOp>(loc, args[0], args[1]); in genMod()
3386 builder.create<mlir::arith::RemSIOp>(loc, args[0], args[1]); in genModulo()
3387 auto argXor = builder.create<mlir::arith::XOrIOp>(loc, args[0], args[1]); in genModulo()
3388 mlir::Value zero = builder.createIntegerConstant(loc, argXor.getType(), 0); in genModulo()
3389 auto argSignDifferent = builder.create<mlir::arith::CmpIOp>( in genModulo()
3391 auto remainderIsNotZero = builder.create<mlir::arith::CmpIOp>( in genModulo()
3393 auto mustAddP = builder.create<mlir::arith::AndIOp>(loc, remainderIsNotZero, in genModulo()
3396 builder.create<mlir::arith::AddIOp>(loc, remainder, args[1]); in genModulo()
3397 return builder.create<mlir::arith::SelectOp>(loc, mustAddP, remPlusP, in genModulo()
3401 auto remainder = builder.create<mlir::arith::RemFOp>(loc, args[0], args[1]); in genModulo()
3402 mlir::Value zero = builder.createRealZeroConstant(loc, remainder.getType()); in genModulo()
3403 auto remainderIsNotZero = builder.create<mlir::arith::CmpFOp>( in genModulo()
3405 auto aLessThanZero = builder.create<mlir::arith::CmpFOp>( in genModulo()
3407 auto pLessThanZero = builder.create<mlir::arith::CmpFOp>( in genModulo()
3410 builder.create<mlir::arith::XOrIOp>(loc, aLessThanZero, pLessThanZero); in genModulo()
3411 auto mustAddP = builder.create<mlir::arith::AndIOp>(loc, remainderIsNotZero, in genModulo()
3413 auto remPlusP = builder.create<mlir::arith::AddFOp>(loc, remainder, args[1]); in genModulo()
3414 return builder.create<mlir::arith::SelectOp>(loc, mustAddP, remPlusP, in genModulo()
3437 mlir::Value frompos = builder.createConvert(loc, resultType, unbox(args[1])); in genMvbits()
3438 mlir::Value len = builder.createConvert(loc, resultType, unbox(args[2])); in genMvbits()
3442 auto to = builder.create<fir::LoadOp>(loc, resultType, toAddr); in genMvbits()
3443 mlir::Value topos = builder.createConvert(loc, resultType, unbox(args[4])); in genMvbits()
3444 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genMvbits()
3445 mlir::Value ones = builder.createIntegerConstant(loc, resultType, -1); in genMvbits()
3446 mlir::Value bitSize = builder.createIntegerConstant( in genMvbits()
3448 auto shiftCount = builder.create<mlir::arith::SubIOp>(loc, bitSize, len); in genMvbits()
3449 auto mask = builder.create<mlir::arith::ShRUIOp>(loc, ones, shiftCount); in genMvbits()
3450 auto unchangedTmp1 = builder.create<mlir::arith::ShLIOp>(loc, mask, topos); in genMvbits()
3452 builder.create<mlir::arith::XOrIOp>(loc, unchangedTmp1, ones); in genMvbits()
3453 auto unchanged = builder.create<mlir::arith::AndIOp>(loc, unchangedTmp2, to); in genMvbits()
3454 auto frombitsTmp1 = builder.create<mlir::arith::ShRUIOp>(loc, from, frompos); in genMvbits()
3456 builder.create<mlir::arith::AndIOp>(loc, frombitsTmp1, mask); in genMvbits()
3457 auto frombits = builder.create<mlir::arith::ShLIOp>(loc, frombitsTmp2, topos); in genMvbits()
3458 auto resTmp = builder.create<mlir::arith::OrIOp>(loc, unchanged, frombits); in genMvbits()
3459 auto lenIsZero = builder.create<mlir::arith::CmpIOp>( in genMvbits()
3461 auto res = builder.create<mlir::arith::SelectOp>(loc, lenIsZero, to, resTmp); in genMvbits()
3462 builder.create<fir::StoreOp>(loc, res, toAddr); in genMvbits()
3473 return builder.createConvert( in genNearest()
3474 loc, resultType, fir::runtime::genNearest(builder, loc, realX, realS)); in genNearest()
3490 mlir::Value allOnes = builder.createIntegerConstant(loc, resultType, -1); in genNot()
3491 return builder.create<mlir::arith::XOrIOp>(loc, args[0], allOnes); in genNot()
3504 mlir::Value boxStorage = builder.createTemporary(loc, boxType); in genNull()
3506 builder, loc, boxType, mold->nonDeferredLenParams()); in genNull()
3507 builder.create<fir::StoreOp>(loc, box, boxStorage); in genNull()
3519 mlir::Value array = builder.createBox(loc, args[0]); in genPack()
3522 mlir::Value mask = builder.createBox(loc, args[1]); in genPack()
3526 ? builder.create<fir::AbsentOp>( in genPack()
3527 loc, fir::BoxType::get(builder.getI1Type())) in genPack()
3528 : builder.createBox(loc, args[2]); in genPack()
3531 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, 1); in genPack()
3533 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genPack()
3535 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genPack()
3537 fir::runtime::genPack(builder, loc, resultIrBox, array, mask, vector); in genPack()
3548 mlir::Value count = builder.create<mlir::math::CtPopOp>(loc, args); in genPopcnt()
3550 return builder.createConvert(loc, resultType, count); in genPopcnt()
3559 mlir::Value one = builder.createIntegerConstant(loc, resultType, 1); in genPoppar()
3561 return builder.create<mlir::arith::AndIOp>(loc, count, one); in genPoppar()
3569 return builder.create<fir::IsPresentOp>(loc, builder.getI1Type(), in genPresent()
3578 resultType, builder, loc, stmtCtx, in genProduct()
3585 Fortran::lower::genRandomInit(builder, loc, fir::getBase(args[0]), in genRandomInit()
3593 Fortran::lower::genRandomNumber(builder, loc, fir::getBase(args[0])); in genRandomNumber()
3601 Fortran::lower::genRandomSeed(builder, loc, i, fir::getBase(args[i])); in genRandomSeed()
3604 Fortran::lower::genRandomSeed(builder, loc, -1, mlir::Value{}); in genRandomSeed()
3612 mlir::Value string = builder.createBox(loc, args[0]); in genRepeat()
3616 fir::factory::createTempMutableBox(builder, loc, resultType); in genRepeat()
3618 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genRepeat()
3620 fir::runtime::genRepeat(builder, loc, resultIrBox, string, ncopies); in genRepeat()
3633 mlir::Value source = builder.createBox(loc, args[0]); in genReshape()
3636 mlir::Value shape = builder.createBox(loc, args[1]); in genReshape()
3647 ? builder.create<fir::AbsentOp>( in genReshape()
3648 loc, fir::BoxType::get(builder.getI1Type())) in genReshape()
3649 : builder.createBox(loc, args[2]); in genReshape()
3653 ? builder.create<fir::AbsentOp>( in genReshape()
3654 loc, fir::BoxType::get(builder.getI1Type())) in genReshape()
3655 : builder.createBox(loc, args[3]); in genReshape()
3658 mlir::Type type = builder.getVarLenSeqTy(resultType, resultRank); in genReshape()
3660 fir::factory::createTempMutableBox(builder, loc, type); in genReshape()
3663 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genReshape()
3665 fir::runtime::genReshape(builder, loc, resultIrBox, source, shape, pad, in genReshape()
3677 return builder.createConvert( in genRRSpacing()
3679 fir::runtime::genRRSpacing(builder, loc, fir::getBase(args[0]))); in genRRSpacing()
3690 return builder.createConvert( in genScale()
3691 loc, resultType, fir::runtime::genScale(builder, loc, realX, intI)); in genScale()
3713 fir::factory::CharacterExprHelper{builder, loc}.getCharacterKind( in genScan()
3725 ? builder.createIntegerConstant(loc, builder.getI1Type(), 0) in genScan()
3728 return builder.createConvert(loc, resultType, in genScan()
3729 fir::runtime::genScan(builder, loc, kind, in genScan()
3738 builder.getContext(), builder.getKindMap().defaultLogicalKind()); in genScan()
3739 mlir::Value temp = builder.createTemporary(loc, logTy); in genScan()
3740 mlir::Value castb = builder.createConvert(loc, logTy, b); in genScan()
3741 builder.create<fir::StoreOp>(loc, castb, temp); in genScan()
3742 return builder.createBox(loc, temp); in genScan()
3746 : builder.create<fir::AbsentOp>( in genScan()
3747 loc, fir::BoxType::get(builder.getI1Type())); in genScan()
3750 mlir::Value string = builder.createBox(loc, args[0]); in genScan()
3753 mlir::Value set = builder.createBox(loc, args[1]); in genScan()
3760 fir::factory::createTempMutableBox(builder, loc, resultType); in genScan()
3762 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genScan()
3764 fir::runtime::genScanDescriptor(builder, loc, resultIrBox, string, set, back, in genScan()
3777 return builder.createConvert( in genSelectedIntKind()
3779 fir::runtime::genSelectedIntKind(builder, loc, fir::getBase(args[0]))); in genSelectedIntKind()
3791 ? builder.create<fir::AbsentOp>( in genSelectedRealKind()
3792 loc, fir::ReferenceType::get(builder.getI1Type())) in genSelectedRealKind()
3798 ? builder.create<fir::AbsentOp>( in genSelectedRealKind()
3799 loc, fir::ReferenceType::get(builder.getI1Type())) in genSelectedRealKind()
3805 ? builder.create<fir::AbsentOp>( in genSelectedRealKind()
3806 loc, fir::ReferenceType::get(builder.getI1Type())) in genSelectedRealKind()
3809 return builder.createConvert( in genSelectedRealKind()
3811 fir::runtime::genSelectedRealKind(builder, loc, precision, range, radix)); in genSelectedRealKind()
3819 return builder.createConvert( in genSetExponent()
3821 fir::runtime::genSetExponent(builder, loc, fir::getBase(args[0]), in genSetExponent()
3836 mlir::Value bitSize = builder.createIntegerConstant(loc, resultType, bits); in genShift()
3837 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genShift()
3838 mlir::Value shift = builder.createConvert(loc, resultType, args[1]); in genShift()
3840 mlir::Value tooSmall = builder.create<mlir::arith::CmpIOp>( in genShift()
3842 mlir::Value tooLarge = builder.create<mlir::arith::CmpIOp>( in genShift()
3845 builder.create<mlir::arith::OrIOp>(loc, tooSmall, tooLarge); in genShift()
3847 mlir::Value shifted = builder.create<Shift>(loc, args[0], shift); in genShift()
3848 return builder.create<mlir::arith::SelectOp>(loc, outOfBounds, zero, shifted); in genShift()
3857 mlir::Value zero = builder.createIntegerConstant(loc, resultType, 0); in genSign()
3858 auto neg = builder.create<mlir::arith::SubIOp>(loc, zero, abs); in genSign()
3859 auto cmp = builder.create<mlir::arith::CmpIOp>( in genSign()
3861 return builder.create<mlir::arith::SelectOp>(loc, cmp, neg, abs); in genSign()
3878 mlir::Value array = builder.createBox(loc, args[0]); in genSize()
3884 return builder.createConvert(loc, resultType, in genSize()
3885 fir::runtime::genSize(builder, loc, array)); in genSize()
3890 return builder.createConvert( in genSize()
3891 loc, resultType, fir::runtime::genSizeDim(builder, loc, array, dim)); in genSize()
3893 mlir::Value isDynamicallyAbsent = builder.genIsNullAddr(loc, dim); in genSize()
3894 return builder in genSize()
3898 mlir::Value size = builder.createConvert( in genSize()
3899 loc, resultType, fir::runtime::genSize(builder, loc, array)); in genSize()
3900 builder.create<fir::ResultOp>(loc, size); in genSize()
3903 mlir::Value dimValue = builder.create<fir::LoadOp>(loc, dim); in genSize()
3904 mlir::Value size = builder.createConvert( in genSize()
3906 fir::runtime::genSizeDim(builder, loc, array, dimValue)); in genSize()
3907 builder.create<fir::ResultOp>(loc, size); in genSize()
3918 builder.create<mlir::math::CountTrailingZerosOp>(loc, args); in genTrailz()
3920 return builder.createConvert(loc, resultType, result); in genTrailz()
3935 static mlir::Value computeLBOUND(fir::FirOpBuilder &builder, mlir::Location loc, in computeLBOUND() argument
3941 mlir::Value lb = fir::factory::readLowerBound(builder, loc, array, dim, one); in computeLBOUND()
3944 mlir::Value extent = fir::factory::readExtent(builder, loc, array, dim); in computeLBOUND()
3945 zero = builder.createConvert(loc, extent.getType(), zero); in computeLBOUND()
3946 auto dimIsEmpty = builder.create<mlir::arith::CmpIOp>( in computeLBOUND()
3948 one = builder.createConvert(loc, lb.getType(), one); in computeLBOUND()
3949 return builder.create<mlir::arith::SelectOp>(loc, dimIsEmpty, one, lb); in computeLBOUND()
3957 fir::FirOpBuilder &builder, in createBoxForLBOUND() argument
3965 mlir::Value localShape = builder.createShape(loc, array); in createBoxForLBOUND()
3967 return builder.create<fir::ReboxOp>(loc, oldBox.getType(), oldBox, in createBoxForLBOUND()
3977 return builder.createBox(loc, array); in createBoxForLBOUND()
3985 fir::factory::getExtents(loc, builder, array); in createBoxForLBOUND()
3987 shape.back() = builder.createIntegerConstant(loc, builder.getIndexType(), 1); in createBoxForLBOUND()
3999 return builder.createBox(loc, safeToEmbox); in createBoxForLBOUND()
4013 mlir::Type indexType = builder.getIndexType(); in genLbound()
4023 mlir::Value lbArray = builder.createTemporary(loc, lbArrayType); in genLbound()
4024 mlir::Type lbAddrType = builder.getRefType(lbType); in genLbound()
4025 mlir::Value one = builder.createIntegerConstant(loc, lbType, 1); in genLbound()
4026 mlir::Value zero = builder.createIntegerConstant(loc, indexType, 0); in genLbound()
4028 mlir::Value lb = computeLBOUND(builder, loc, array, dim, zero, one); in genLbound()
4029 lb = builder.createConvert(loc, lbType, lb); in genLbound()
4030 auto index = builder.createIntegerConstant(loc, indexType, dim); in genLbound()
4032 builder.create<fir::CoordinateOp>(loc, lbAddrType, lbArray, index); in genLbound()
4033 builder.create<fir::StoreOp>(loc, lb, lbAddr); in genLbound()
4036 builder.createIntegerConstant(loc, indexType, rank); in genLbound()
4046 mlir::Value one = builder.createIntegerConstant(loc, resultType, 1); in genLbound()
4047 mlir::Value zero = builder.createIntegerConstant(loc, indexType, 0); in genLbound()
4048 mlir::Value lb = computeLBOUND(builder, loc, array, *cstDim - 1, zero, one); in genLbound()
4049 return builder.createConvert(loc, resultType, lb); in genLbound()
4052 fir::ExtendedValue box = createBoxForLBOUND(loc, builder, array); in genLbound()
4053 return builder.createConvert( in genLbound()
4055 fir::runtime::genLboundDim(builder, loc, fir::getBase(box), dim)); in genLbound()
4068 mlir::Value one = builder.createIntegerConstant(loc, resultType, 1); in genUbound()
4069 mlir::Value ubound = builder.create<mlir::arith::SubIOp>(loc, lbound, one); in genUbound()
4070 return builder.create<mlir::arith::AddIOp>(loc, ubound, extent); in genUbound()
4074 ? builder.createIntegerConstant( in genUbound()
4075 loc, builder.getIndexType(), in genUbound()
4076 builder.getKindMap().defaultIntegerKind()) in genUbound()
4080 mlir::Type type = builder.getVarLenSeqTy(resultType, /*rank=*/1); in genUbound()
4082 fir::factory::createTempMutableBox(builder, loc, type); in genUbound()
4084 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genUbound()
4086 fir::runtime::genUbound(builder, loc, resultIrBox, fir::getBase(args[0]), in genUbound()
4099 return builder.createConvert( in genSpacing()
4101 fir::runtime::genSpacing(builder, loc, fir::getBase(args[0]))); in genSpacing()
4112 mlir::Value source = builder.createBox(loc, args[0]); in genSpread()
4124 builder.getVarLenSeqTy(resultType, sourceRank + 1); in genSpread()
4126 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genSpread()
4128 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genSpread()
4130 fir::runtime::genSpread(builder, loc, resultIrBox, source, dim, ncopies); in genSpread()
4141 builder, loc, stmtCtx, "unexpected result for Sum", args); in genSum()
4147 Fortran::lower::genSystemClock(builder, loc, fir::getBase(args[0]), in genSystemClock()
4159 mlir::Value source = builder.createBox(loc, args[0]); in genTransfer()
4162 mlir::Value mold = builder.createBox(loc, args[1]); in genTransfer()
4171 : builder.getVarLenSeqTy(resultType, 1); in genTransfer()
4173 fir::factory::createTempMutableBox(builder, loc, type); in genTransfer()
4178 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genTransfer()
4180 Fortran::lower::genTransfer(builder, loc, resultIrBox, source, mold); in genTransfer()
4184 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genTransfer()
4187 Fortran::lower::genTransfer(builder, loc, resultIrBox, source, mold); in genTransfer()
4190 Fortran::lower::genTransferSize(builder, loc, resultIrBox, source, mold, in genTransfer()
4206 mlir::Value source = builder.createBox(loc, args[0]); in genTranspose()
4209 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, 2); in genTranspose()
4211 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genTranspose()
4213 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genTranspose()
4215 fir::runtime::genTranspose(builder, loc, resultIrBox, source); in genTranspose()
4227 mlir::Value string = builder.createBox(loc, args[0]); in genTrim()
4230 fir::factory::createTempMutableBox(builder, loc, resultType); in genTrim()
4232 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genTrim()
4234 fir::runtime::genTrim(builder, loc, resultIrBox, string); in genTrim()
4243 fir::FirOpBuilder &builder, in createExtremumCompare() argument
4260 builder.create<mlir::arith::CmpFOp>(loc, orderedCmp, left, right); in createExtremumCompare()
4261 auto rightIsNan = builder.create<mlir::arith::CmpFOp>( in createExtremumCompare()
4264 builder.create<mlir::arith::OrIOp>(loc, leftIsResult, rightIsNan); in createExtremumCompare()
4268 builder.create<mlir::arith::CmpFOp>(loc, orderedCmp, left, right); in createExtremumCompare()
4269 auto leftIsNan = builder.create<mlir::arith::CmpFOp>( in createExtremumCompare()
4271 result = builder.create<mlir::arith::OrIOp>(loc, leftIsResult, leftIsNan); in createExtremumCompare()
4275 builder.create<mlir::arith::CmpFOp>(loc, orderedCmp, left, right); in createExtremumCompare()
4282 builder.create<mlir::arith::CmpFOp>(loc, unorderedCmp, left, right); in createExtremumCompare()
4290 builder.create<mlir::arith::CmpIOp>(loc, integerPredicate, left, right); in createExtremumCompare()
4308 mlir::Value vector = builder.createBox(loc, args[0]); in genUnpack()
4311 fir::BoxValue maskBox = builder.createBox(loc, args[1]); in genUnpack()
4316 mlir::Value field = builder.createBox(loc, args[2]); in genUnpack()
4319 mlir::Type resultArrayType = builder.getVarLenSeqTy(resultType, maskRank); in genUnpack()
4321 fir::factory::createTempMutableBox(builder, loc, resultArrayType); in genUnpack()
4323 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genUnpack()
4325 fir::runtime::genUnpack(builder, loc, resultIrBox, vector, mask, field); in genUnpack()
4350 fir::factory::CharacterExprHelper{builder, loc}.getCharacterKind( in genVerify()
4362 ? builder.createIntegerConstant(loc, builder.getI1Type(), 0) in genVerify()
4365 return builder.createConvert( in genVerify()
4367 fir::runtime::genVerify(builder, loc, kind, stringBase, stringLen, in genVerify()
4375 builder.getContext(), builder.getKindMap().defaultLogicalKind()); in genVerify()
4376 mlir::Value temp = builder.createTemporary(loc, logTy); in genVerify()
4377 mlir::Value castb = builder.createConvert(loc, logTy, b); in genVerify()
4378 builder.create<fir::StoreOp>(loc, castb, temp); in genVerify()
4379 return builder.createBox(loc, temp); in genVerify()
4383 : builder.create<fir::AbsentOp>( in genVerify()
4384 loc, fir::BoxType::get(builder.getI1Type())); in genVerify()
4387 mlir::Value string = builder.createBox(loc, args[0]); in genVerify()
4390 mlir::Value set = builder.createBox(loc, args[1]); in genVerify()
4397 fir::factory::createTempMutableBox(builder, loc, resultType); in genVerify()
4399 fir::factory::getMutableIRBox(builder, loc, resultMutableBox); in genVerify()
4401 fir::runtime::genVerifyDescriptor(builder, loc, resultIrBox, string, set, in genVerify()
4413 resultType, builder, loc, stmtCtx, in genMaxloc()
4422 fir::runtime::genMaxvalChar, resultType, builder, loc, in genMaxval()
4431 resultType, builder, loc, stmtCtx, in genMinloc()
4440 fir::runtime::genMinvalChar, resultType, builder, loc, in genMinval()
4452 createExtremumCompare<extremum, behavior>(loc, builder, result, arg); in genExtremum()
4453 result = builder.create<mlir::arith::SelectOp>(loc, mask, result, arg); in genExtremum()
4485 Fortran::lower::genIntrinsicCall(fir::FirOpBuilder &builder, mlir::Location loc, in genIntrinsicCall() argument
4490 return IntrinsicLibrary{builder, loc, &stmtCtx}.genIntrinsicCall( in genIntrinsicCall()
4494 mlir::Value Fortran::lower::genMax(fir::FirOpBuilder &builder, in genMax() argument
4498 return IntrinsicLibrary{builder, loc} in genMax()
4503 mlir::Value Fortran::lower::genMin(fir::FirOpBuilder &builder, in genMin() argument
4507 return IntrinsicLibrary{builder, loc} in genMin()
4512 mlir::Value Fortran::lower::genPow(fir::FirOpBuilder &builder, in genPow() argument
4522 return IntrinsicLibrary{builder, loc}.genRuntimeCall("pow", type, {x, y}); in genPow()
4526 fir::FirOpBuilder &builder, mlir::Location loc, llvm::StringRef name, in getUnrestrictedIntrinsicSymbolRefAttr() argument
4528 return IntrinsicLibrary{builder, loc}.getUnrestrictedIntrinsicSymbolRefAttr( in getUnrestrictedIntrinsicSymbolRefAttr()