[flang] [llvm] [clang-tools-extra] [clang] [flang] add SYSTEM runtime and lowering intrinsics support (PR #74309)
Yi Wu via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 29 02:53:51 PST 2024
================
@@ -5934,6 +5938,40 @@ IntrinsicLibrary::genSum(mlir::Type resultType,
resultType, args);
}
+// SYSTEM
+void IntrinsicLibrary::genSystem(llvm::ArrayRef<fir::ExtendedValue> args) {
+ assert(args.size() == 2);
+ mlir::Value command = fir::getBase(args[0]);
+ const fir::ExtendedValue &exitstat = args[1];
+
+ if (!command)
+ fir::emitFatalError(loc, "expected COMMAND parameter");
+
+ mlir::Type boxNoneTy = fir::BoxType::get(builder.getNoneType());
+
+ mlir::Value waitBool = builder.createBool(loc, true);
+ mlir::Value exitstatBox =
+ isStaticallyPresent(exitstat)
+ ? fir::getBase(exitstat)
+ : builder.create<fir::AbsentOp>(loc, boxNoneTy).getResult();
+
+ // Create a dummmy cmdstat to prevent EXECUTE_COMMAND_LINE terminate itself
+ // when cmdstat is assigned with a non-zero value but not present
+ mlir::Value tempValue =
+ builder.createIntegerConstant(loc, builder.getI2Type(), 0);
+ mlir::Value temp = builder.createTemporary(loc, builder.getI2Type());
----------------
yi-wu-arm wrote:
True, I thought an I2Type is an integer with kind 2, in fact it is a 2bit int, the correct type I need to use here is an int16(int kind 2): https://github.com/llvm/llvm-project/blob/743946e8ef0d164cbaa3409d11b218e299ccd35e/mlir/lib/IR/Builders.cpp#L81
https://github.com/llvm/llvm-project/pull/74309
More information about the cfe-commits
mailing list