Author: Qiu Chaofan Date: 2023-09-05T11:22:09+08:00 New Revision: 082c5d7f63c490af69e8280e5b5ff6bf6051bd59
URL: https://github.com/llvm/llvm-project/commit/082c5d7f63c490af69e8280e5b5ff6bf6051bd59 DIFF: https://github.com/llvm/llvm-project/commit/082c5d7f63c490af69e8280e5b5ff6bf6051bd59.diff LOG: [PowerPC] Implement builtin for mffsl mffsl is available since ISA 3.0. The builtin is named with ppc prefix to follow our convention. For targets earlier than power9, GCC generates extra code to support the functionality, while this patch does not implement such behavior. Reviewed By: nemanjai, tuliom Differential Revision: https://reviews.llvm.org/D158065 Added: Modified: clang/include/clang/Basic/BuiltinsPPC.def clang/test/CodeGen/PowerPC/builtins-ppc.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/test/CodeGen/PowerPC/read-set-flm.ll Removed: ################################################################################ diff --git a/clang/include/clang/Basic/BuiltinsPPC.def b/clang/include/clang/Basic/BuiltinsPPC.def index 1e52d351780c150..18a1186053481ed 100644 --- a/clang/include/clang/Basic/BuiltinsPPC.def +++ b/clang/include/clang/Basic/BuiltinsPPC.def @@ -151,6 +151,7 @@ TARGET_BUILTIN(__builtin_ppc_extract_exp, "Uid", "", "power9-vector") TARGET_BUILTIN(__builtin_ppc_extract_sig, "ULLid", "", "power9-vector") BUILTIN(__builtin_ppc_mtfsb0, "vUIi", "") BUILTIN(__builtin_ppc_mtfsb1, "vUIi", "") +TARGET_BUILTIN(__builtin_ppc_mffsl, "d", "", "isa-v30-instructions") BUILTIN(__builtin_ppc_mtfsf, "vUIiUi", "") BUILTIN(__builtin_ppc_mtfsfi, "vUIiUIi", "") TARGET_BUILTIN(__builtin_ppc_insert_exp, "ddULLi", "", "power9-vector") diff --git a/clang/test/CodeGen/PowerPC/builtins-ppc.c b/clang/test/CodeGen/PowerPC/builtins-ppc.c index adfbf27b4c8d4cd..ccc91b6560845e2 100644 --- a/clang/test/CodeGen/PowerPC/builtins-ppc.c +++ b/clang/test/CodeGen/PowerPC/builtins-ppc.c @@ -35,6 +35,11 @@ void test_builtin_ppc_flm() { // CHECK: call double @llvm.ppc.setflm(double %1) res = __builtin_setflm(res); + +#ifdef _ARCH_PWR9 + // P9: call double @llvm.ppc.mffsl() + res = __builtin_ppc_mffsl(); +#endif } double test_builtin_unpack_ldbl(long double x) { diff --git a/llvm/include/llvm/IR/IntrinsicsPowerPC.td b/llvm/include/llvm/IR/IntrinsicsPowerPC.td index 58822059b9ac2ed..3ede2a3736bf30d 100644 --- a/llvm/include/llvm/IR/IntrinsicsPowerPC.td +++ b/llvm/include/llvm/IR/IntrinsicsPowerPC.td @@ -33,6 +33,10 @@ let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". def int_ppc_readflm : ClangBuiltin<"__builtin_readflm">, DefaultAttrsIntrinsic<[llvm_double_ty], [], [IntrNoMerge, IntrHasSideEffects]>; + def int_ppc_mffsl : ClangBuiltin<"__builtin_ppc_mffsl">, + DefaultAttrsIntrinsic<[llvm_double_ty], [], + [IntrNoMerge, IntrHasSideEffects]>; + // Set FPSCR register, and return previous content def int_ppc_setflm : ClangBuiltin<"__builtin_setflm">, DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td index a71cd9efb8b5fda..e1c513dc52dcee8 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.td @@ -3180,6 +3180,7 @@ def : Pat<(PPCtc_return CTRRC:$dst, imm:$imm), (TCRETURNri CTRRC:$dst, imm:$imm)>; def : Pat<(int_ppc_readflm), (MFFS)>; +def : Pat<(int_ppc_mffsl), (MFFSL)>; // Hi and Lo for Darwin Global Addresses. def : Pat<(PPChi tglobaladdr:$in, 0), (LIS tglobaladdr:$in)>; diff --git a/llvm/test/CodeGen/PowerPC/read-set-flm.ll b/llvm/test/CodeGen/PowerPC/read-set-flm.ll index 981dcb25ef96af4..d9f392474555288 100644 --- a/llvm/test/CodeGen/PowerPC/read-set-flm.ll +++ b/llvm/test/CodeGen/PowerPC/read-set-flm.ll @@ -148,8 +148,19 @@ entry: ret void } +define double @mffsl() { +; CHECK-LABEL: mffsl: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: mffsl 1 +; CHECK-NEXT: blr +entry: + %x = call double @llvm.ppc.mffsl() + ret double %x +} + declare void @effect_func() declare void @readonly_func() #1 +declare double @llvm.ppc.mffsl() declare double @llvm.ppc.readflm() declare double @llvm.ppc.setflm(double) declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits