mlir::Value genIand(mlir::Type, llvm::ArrayRef<mlir::Value>);
mlir::Value genIbits(mlir::Type, llvm::ArrayRef<mlir::Value>);
mlir::Value genIbset(mlir::Type, llvm::ArrayRef<mlir::Value>);
+ mlir::Value genIeor(mlir::Type, llvm::ArrayRef<mlir::Value>);
mlir::Value genIshft(mlir::Type, llvm::ArrayRef<mlir::Value>);
mlir::Value genIshftc(mlir::Type, llvm::ArrayRef<mlir::Value>);
fir::ExtendedValue genLbound(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
{"iand", &I::genIand},
{"ibits", &I::genIbits},
{"ibset", &I::genIbset},
+ {"ieor", &I::genIeor},
{"ishft", &I::genIshft},
{"ishftc", &I::genIshftc},
{"len",
return builder.create<mlir::arith::OrIOp>(loc, args[0], mask);
}
+// IEOR
+mlir::Value IntrinsicLibrary::genIeor(mlir::Type resultType,
+ llvm::ArrayRef<mlir::Value> args) {
+ assert(args.size() == 2);
+ return builder.create<mlir::arith::XOrIOp>(loc, args[0], args[1]);
+}
+
// ISHFT
mlir::Value IntrinsicLibrary::genIshft(mlir::Type resultType,
llvm::ArrayRef<mlir::Value> args) {
--- /dev/null
+! RUN: bbc -emit-fir %s -o - | FileCheck %s
+
+! CHECK-LABEL: ieor_test
+subroutine ieor_test(a, b)
+ integer :: a, b
+ print *, ieor(a, b)
+ ! CHECK: %{{[0-9]+}} = arith.xori %{{[0-9]+}}, %{{[0-9]+}} : i{{(8|16|32|64|128)}}
+end subroutine ieor_test
+