[PATCH] D105930: [PowerPC] Implement XL compact math builtins
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGc8937b6cb975: [PowerPC] Implement XL compact math builtins (authored by lei). Changed prior to commit: https://reviews.llvm.org/D105930?vs=359070=359397#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Basic/Targets/PPC.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-xlcompat-error.c clang/test/CodeGen/builtins-ppc-xlcompat-math.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9-64bit.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/lib/Target/PowerPC/PPCInstrVSX.td llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-32BIT + +define dso_local zeroext i32 @extract_exp(double %d) { +; CHECK-LABEL: extract_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxexpdp 3, 1 +; CHECK-NEXT:clrldi 3, 3, 32 +; CHECK-NEXT:blr +; +; CHECK-32BIT-LABEL: extract_exp: +; CHECK-32BIT: # %bb.0: # %entry +; CHECK-32BIT-NEXT:xsxexpdp 3, 1 +; CHECK-32BIT-NEXT:# kill: def $r3 killed $r3 killed $x3 +; CHECK-32BIT-NEXT:blr +entry: + %0 = tail call i32 @llvm.ppc.extract.exp(double %d) + ret i32 %0 +} +declare i32 @llvm.ppc.extract.exp(double) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s + +define dso_local i64 @extract_sig(double %d) { +; CHECK-LABEL: extract_sig: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxsigdp 3, 1 +; CHECK-NEXT:blr +entry: + %0 = tail call i64 @llvm.ppc.extract.sig(double %d) + ret i64 %0 +} +declare i64 @llvm.ppc.extract.sig(double) + +define dso_local double @insert_exp(double %d, i64 %ull) { +; CHECK-LABEL: insert_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:mffprd 3, 1 +; CHECK-NEXT:xsiexpdp 1, 3, 4 +; CHECK-NEXT:# kill: def $f1 killed $f1 killed $vsl1 +; CHECK-NEXT:blr +entry: + %0 = tail call double @llvm.ppc.insert.exp(double %d, i64 %ull) + ret double %0 +} +declare double @llvm.ppc.insert.exp(double, i64) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll @@ -0,0 +1,231 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mattr=-vsx < %s | FileCheck %s --check-prefix=CHECK-NOVSX +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr7 \ +; RUN: < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 + +define dso_local void @mtfsb0() { +; CHECK-PWR8-LABEL: mtfsb0: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb0 10 +; CHECK-PWR8-NEXT:blr +; +; CHECK-NOVSX-LABEL: mtfsb0: +; CHECK-NOVSX: # %bb.0: # %entry +; CHECK-NOVSX-NEXT:mtfsb0
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei added inline comments. Comment at: llvm/lib/Target/PowerPC/PPCInstrInfo.td:3087 // RM should be set. +let hasSideEffects = 1 in { def MTFSB0 : XForm_43<63, 70, (outs), (ins u5imm:$FM), nemanjai wrote: > nemanjai wrote: > > I think we should conservatively set RM as an implicit def here. @ZhangKang > > you modified this code most recently, please provide your opinion here. > This was not addressed. Will this be added in a follow-up patch? Yes, sorry I will address this in a subsequent patch since adding RM will cause unrelated LIT failures. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
nemanjai accepted this revision. nemanjai added a comment. This revision is now accepted and ready to land. LGTM other than the comment that wasn't addressed (which I assume will be addressed in a subsequent patch). Comment at: llvm/lib/Target/PowerPC/PPCInstrInfo.td:3087 // RM should be set. +let hasSideEffects = 1 in { def MTFSB0 : XForm_43<63, 70, (outs), (ins u5imm:$FM), nemanjai wrote: > I think we should conservatively set RM as an implicit def here. @ZhangKang > you modified this code most recently, please provide your opinion here. This was not addressed. Will this be added in a follow-up patch? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei updated this revision to Diff 359070. lei added a comment. rebase to ToT Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Basic/Targets/PPC.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-xlcompat-error.c clang/test/CodeGen/builtins-ppc-xlcompat-math.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9-64bit.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/lib/Target/PowerPC/PPCInstrVSX.td llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-32BIT + +define dso_local zeroext i32 @extract_exp(double %d) { +; CHECK-LABEL: extract_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxexpdp 3, 1 +; CHECK-NEXT:clrldi 3, 3, 32 +; CHECK-NEXT:blr +; +; CHECK-32BIT-LABEL: extract_exp: +; CHECK-32BIT: # %bb.0: # %entry +; CHECK-32BIT-NEXT:xsxexpdp 3, 1 +; CHECK-32BIT-NEXT:# kill: def $r3 killed $r3 killed $x3 +; CHECK-32BIT-NEXT:blr +entry: + %0 = tail call i32 @llvm.ppc.extract.exp(double %d) + ret i32 %0 +} +declare i32 @llvm.ppc.extract.exp(double) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s + +define dso_local i64 @extract_sig(double %d) { +; CHECK-LABEL: extract_sig: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxsigdp 3, 1 +; CHECK-NEXT:blr +entry: + %0 = tail call i64 @llvm.ppc.extract.sig(double %d) + ret i64 %0 +} +declare i64 @llvm.ppc.extract.sig(double) + +define dso_local double @insert_exp(double %d, i64 %ull) { +; CHECK-LABEL: insert_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:mffprd 3, 1 +; CHECK-NEXT:xsiexpdp 1, 3, 4 +; CHECK-NEXT:# kill: def $f1 killed $f1 killed $vsl1 +; CHECK-NEXT:blr +entry: + %0 = tail call double @llvm.ppc.insert.exp(double %d, i64 %ull) + ret double %0 +} +declare double @llvm.ppc.insert.exp(double, i64) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll @@ -0,0 +1,231 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mattr=-vsx < %s | FileCheck %s --check-prefix=CHECK-NOVSX +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr7 \ +; RUN: < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 + +define dso_local void @mtfsb0() { +; CHECK-PWR8-LABEL: mtfsb0: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb0 10 +; CHECK-PWR8-NEXT:blr +; +; CHECK-NOVSX-LABEL: mtfsb0: +; CHECK-NOVSX: # %bb.0: # %entry +; CHECK-NOVSX-NEXT:mtfsb0 10 +; CHECK-NOVSX-NEXT:blr +; +; CHECK-PWR7-LABEL: mtfsb0: +; CHECK-PWR7: # %bb.0: # %entry +; CHECK-PWR7-NEXT:mtfsb0 10 +; CHECK-PWR7-NEXT:blr +entry: + tail call void @llvm.ppc.mtfsb0(i32 10) + ret void +} +
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei added inline comments. Comment at: llvm/lib/Target/PowerPC/PPCInstrInfo.td:3650 +// XL Compat intrinsics. +def : Pat<(int_ppc_fmsub f64:$A, f64:$B, f64:$C), (FMSUB $A, $B, $C)>; +def : Pat<(int_ppc_fmsubs f32:$A, f32:$B, f32:$C), (FMSUBS $A, $B, $C)>; nemanjai wrote: > Please review the order of operands carefully here. I believe the order is > wrong either for this one or for the VSX version. Double-check all of the > others as well please. I double checked and both seem correct to me. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei updated this revision to Diff 359050. lei marked 3 inline comments as done. lei added a comment. Address review comments to add/upate: - builtin encoding for params that need to be folded into constant expr - llvm intrinsic property for immediates - test line for `-mattr=-vsx` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Basic/Targets/PPC.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-xlcompat-error.c clang/test/CodeGen/builtins-ppc-xlcompat-math.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9-64bit.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/lib/Target/PowerPC/PPCInstrVSX.td llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-32BIT + +define dso_local zeroext i32 @extract_exp(double %d) { +; CHECK-LABEL: extract_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxexpdp 3, 1 +; CHECK-NEXT:clrldi 3, 3, 32 +; CHECK-NEXT:blr +; +; CHECK-32BIT-LABEL: extract_exp: +; CHECK-32BIT: # %bb.0: # %entry +; CHECK-32BIT-NEXT:xsxexpdp 3, 1 +; CHECK-32BIT-NEXT:# kill: def $r3 killed $r3 killed $x3 +; CHECK-32BIT-NEXT:blr +entry: + %0 = tail call i32 @llvm.ppc.extract.exp(double %d) + ret i32 %0 +} +declare i32 @llvm.ppc.extract.exp(double) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s + +define dso_local i64 @extract_sig(double %d) { +; CHECK-LABEL: extract_sig: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxsigdp 3, 1 +; CHECK-NEXT:blr +entry: + %0 = tail call i64 @llvm.ppc.extract.sig(double %d) + ret i64 %0 +} +declare i64 @llvm.ppc.extract.sig(double) + +define dso_local double @insert_exp(double %d, i64 %ull) { +; CHECK-LABEL: insert_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:mffprd 3, 1 +; CHECK-NEXT:xsiexpdp 1, 3, 4 +; CHECK-NEXT:# kill: def $f1 killed $f1 killed $vsl1 +; CHECK-NEXT:blr +entry: + %0 = tail call double @llvm.ppc.insert.exp(double %d, i64 %ull) + ret double %0 +} +declare double @llvm.ppc.insert.exp(double, i64) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll @@ -0,0 +1,231 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mattr=-vsx < %s | FileCheck %s --check-prefix=CHECK-NOVSX +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr7 \ +; RUN: < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 + +define dso_local void @mtfsb0() { +; CHECK-PWR8-LABEL: mtfsb0: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb0 10 +; CHECK-PWR8-NEXT:blr +; +; CHECK-NOVSX-LABEL: mtfsb0: +; CHECK-NOVSX: # %bb.0: # %entry +; CHECK-NOVSX-NEXT:mtfsb0 10 +; CHECK-NOVSX-NEXT:
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
nemanjai requested changes to this revision. nemanjai added a comment. This revision now requires changes to proceed. Please change `compact` in the title to `compat`. Comment at: clang/include/clang/Basic/BuiltinsPPC.def:76-79 +BUILTIN(__builtin_ppc_mtfsb0, "vUi", "") +BUILTIN(__builtin_ppc_mtfsb1, "vUi", "") +BUILTIN(__builtin_ppc_mtfsf, "vUiUi", "") +BUILTIN(__builtin_ppc_mtfsfi, "vUiUi", "") I think at least some of these should be `I` because the parameter must be foldable to an integer constant expression (see `Builtins.def`). Comment at: llvm/include/llvm/IR/IntrinsicsPowerPC.td:1588 + : GCCBuiltin<"__builtin_ppc_mtfsf">, +Intrinsic <[], [llvm_i32_ty, llvm_i32_ty], + [IntrNoMem, IntrHasSideEffects]>; For parameters that need to be immediates, please mark them as such with the respective intrinsic property. Comment at: llvm/lib/Target/PowerPC/PPCInstrInfo.td:3650 +// XL Compat intrinsics. +def : Pat<(int_ppc_fmsub f64:$A, f64:$B, f64:$C), (FMSUB $A, $B, $C)>; +def : Pat<(int_ppc_fmsubs f32:$A, f32:$B, f32:$C), (FMSUBS $A, $B, $C)>; Please review the order of operands carefully here. I believe the order is wrong either for this one or for the VSX version. Double-check all of the others as well please. Comment at: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll:2 +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 Please add `-mattr=-vsx` to one of the run lines since you have added patterns for non-VSX but do not appear to be testing that code path. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei updated this revision to Diff 358665. lei added a comment. cleanup tests Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Basic/Targets/PPC.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-xlcompat-error.c clang/test/CodeGen/builtins-ppc-xlcompat-math.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9-64bit.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/lib/Target/PowerPC/PPCInstrVSX.td llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-32BIT + +define dso_local zeroext i32 @extract_exp(double %d) { +; CHECK-LABEL: extract_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxexpdp 3, 1 +; CHECK-NEXT:clrldi 3, 3, 32 +; CHECK-NEXT:blr +; +; CHECK-32BIT-LABEL: extract_exp: +; CHECK-32BIT: # %bb.0: # %entry +; CHECK-32BIT-NEXT:xsxexpdp 3, 1 +; CHECK-32BIT-NEXT:# kill: def $r3 killed $r3 killed $x3 +; CHECK-32BIT-NEXT:blr +entry: + %0 = tail call i32 @llvm.ppc.extract.exp(double %d) + ret i32 %0 +} +declare i32 @llvm.ppc.extract.exp(double) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s + +define dso_local i64 @extract_sig(double %d) { +; CHECK-LABEL: extract_sig: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxsigdp 3, 1 +; CHECK-NEXT:blr +entry: + %0 = tail call i64 @llvm.ppc.extract.sig(double %d) + ret i64 %0 +} +declare i64 @llvm.ppc.extract.sig(double) + +define dso_local double @insert_exp(double %d, i64 %ull) { +; CHECK-LABEL: insert_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:mffprd 3, 1 +; CHECK-NEXT:xsiexpdp 1, 3, 4 +; CHECK-NEXT:# kill: def $f1 killed $f1 killed $vsl1 +; CHECK-NEXT:blr +entry: + %0 = tail call double @llvm.ppc.insert.exp(double %d, i64 %ull) + ret double %0 +} +declare double @llvm.ppc.insert.exp(double, i64) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll @@ -0,0 +1,179 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr7 \ +; RUN: < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 + +define dso_local void @mtfsb0() { +; CHECK-PWR8-LABEL: mtfsb0: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb0 10 +; CHECK-PWR8-NEXT:blr +; +; CHECK-PWR7-LABEL: mtfsb0: +; CHECK-PWR7: # %bb.0: # %entry +; CHECK-PWR7-NEXT:mtfsb0 10 +; CHECK-PWR7-NEXT:blr +entry: + tail call void @llvm.ppc.mtfsb0(i32 10) + ret void +} + +declare void @llvm.ppc.mtfsb0(i32) + +define dso_local void @mtfsb1() { +; CHECK-PWR8-LABEL: mtfsb1: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb1 0 +; CHECK-PWR8-NEXT:blr +; +; CHECK-PWR7-LABEL: mtfsb1: +; CHECK-PWR7: # %bb.0: # %entry +;
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
nemanjai added a subscriber: ZhangKang. nemanjai added inline comments. Comment at: llvm/lib/Target/PowerPC/PPCInstrInfo.td:3087 // RM should be set. +let hasSideEffects = 1 in { def MTFSB0 : XForm_43<63, 70, (outs), (ins u5imm:$FM), I think we should conservatively set RM as an implicit def here. @ZhangKang you modified this code most recently, please provide your opinion here. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei updated this revision to Diff 358409. lei added a comment. update tc to only check for pwr7 and up Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105930/new/ https://reviews.llvm.org/D105930 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Basic/Targets/PPC.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-xlcompat-error.c clang/test/CodeGen/builtins-ppc-xlcompat-math.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9-64bit.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/lib/Target/PowerPC/PPCInstrVSX.td llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-32BIT + +define dso_local zeroext i32 @extract_exp(double %d) local_unnamed_addr { +; CHECK-LABEL: extract_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxexpdp 3, 1 +; CHECK-NEXT:clrldi 3, 3, 32 +; CHECK-NEXT:blr +; +; CHECK-32BIT-LABEL: extract_exp: +; CHECK-32BIT: # %bb.0: # %entry +; CHECK-32BIT-NEXT:xsxexpdp 3, 1 +; CHECK-32BIT-NEXT:# kill: def $r3 killed $r3 killed $x3 +; CHECK-32BIT-NEXT:blr +entry: + %0 = tail call i32 @llvm.ppc.extract.exp(double %d) + ret i32 %0 +} +declare i32 @llvm.ppc.extract.exp(double) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s + +define dso_local i64 @extract_sig(double %d) local_unnamed_addr { +; CHECK-LABEL: extract_sig: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxsigdp 3, 1 +; CHECK-NEXT:blr +entry: + %0 = tail call i64 @llvm.ppc.extract.sig(double %d) + ret i64 %0 +} +declare i64 @llvm.ppc.extract.sig(double) + +define dso_local double @insert_exp(double %d, i64 %ull) local_unnamed_addr { +; CHECK-LABEL: insert_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:mffprd 3, 1 +; CHECK-NEXT:xsiexpdp 1, 3, 4 +; CHECK-NEXT:# kill: def $f1 killed $f1 killed $vsl1 +; CHECK-NEXT:blr +entry: + %0 = tail call double @llvm.ppc.insert.exp(double %d, i64 %ull) + ret double %0 +} +declare double @llvm.ppc.insert.exp(double, i64) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll @@ -0,0 +1,199 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr7 \ +; RUN: < %s | FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 + +; Function Attrs: nounwind uwtable +define dso_local void @mtfsb0() local_unnamed_addr #0 { +; CHECK-PWR8-LABEL: mtfsb0: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb0 10 +; CHECK-PWR8-NEXT:blr +; +; CHECK-PWR7-LABEL: mtfsb0: +; CHECK-PWR7: # %bb.0: # %entry +; CHECK-PWR7-NEXT:mtfsb0 10 +; CHECK-PWR7-NEXT:blr +entry: + tail call void @llvm.ppc.mtfsb0(i32 10) + ret void +} + +; Function Attrs: nounwind +declare void @llvm.ppc.mtfsb0(i32) + +; Function Attrs: nounwind uwtable +define dso_local void @mtfsb1()
[PATCH] D105930: [PowerPC] Implement XL compact math builtins
lei created this revision. lei added reviewers: stefanp, nemanjai, power-llvm-team. Herald added subscribers: shchenz, hiraditya. lei requested review of this revision. Herald added projects: clang, LLVM. Implement a subset of builtins required for compatiblilty with AIX XL compiler. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D105930 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Basic/Targets/PPC.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-xlcompat-error.c clang/test/CodeGen/builtins-ppc-xlcompat-math.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9-64bit.c clang/test/CodeGen/builtins-ppc-xlcompat-pwr9.c llvm/include/llvm/IR/IntrinsicsPowerPC.td llvm/lib/Target/PowerPC/PPCInstrInfo.td llvm/lib/Target/PowerPC/PPCInstrVSX.td llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9.ll @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-32BIT + +define dso_local zeroext i32 @extract_exp(double %d) local_unnamed_addr { +; CHECK-LABEL: extract_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxexpdp 3, 1 +; CHECK-NEXT:clrldi 3, 3, 32 +; CHECK-NEXT:blr +; +; CHECK-32BIT-LABEL: extract_exp: +; CHECK-32BIT: # %bb.0: # %entry +; CHECK-32BIT-NEXT:xsxexpdp 3, 1 +; CHECK-32BIT-NEXT:# kill: def $r3 killed $r3 killed $x3 +; CHECK-32BIT-NEXT:blr +entry: + %0 = tail call i32 @llvm.ppc.extract.exp(double %d) + ret i32 %0 +} +declare i32 @llvm.ppc.extract.exp(double) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-64bit.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ +; RUN: -mcpu=pwr9 < %s | FileCheck %s + +define dso_local i64 @extract_sig(double %d) local_unnamed_addr { +; CHECK-LABEL: extract_sig: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:xsxsigdp 3, 1 +; CHECK-NEXT:blr +entry: + %0 = tail call i64 @llvm.ppc.extract.sig(double %d) + ret i64 %0 +} +declare i64 @llvm.ppc.extract.sig(double) + +define dso_local double @insert_exp(double %d, i64 %ull) local_unnamed_addr { +; CHECK-LABEL: insert_exp: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT:mffprd 3, 1 +; CHECK-NEXT:xsiexpdp 1, 3, 4 +; CHECK-NEXT:# kill: def $f1 killed $f1 killed $vsl1 +; CHECK-NEXT:blr +entry: + %0 = tail call double @llvm.ppc.insert.exp(double %d, i64 %ull) + ret double %0 +} +declare double @llvm.ppc.insert.exp(double, i64) Index: llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll === --- /dev/null +++ llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-math.ll @@ -0,0 +1,199 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR7 +; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\ +; RUN: FileCheck %s --check-prefix=CHECK-PWR8 + +; Function Attrs: nounwind uwtable +define dso_local void @mtfsb0() local_unnamed_addr #0 { +; CHECK-PWR8-LABEL: mtfsb0: +; CHECK-PWR8: # %bb.0: # %entry +; CHECK-PWR8-NEXT:mtfsb0 10 +; CHECK-PWR8-NEXT:blr +; +; CHECK-PWR7-LABEL: mtfsb0: +; CHECK-PWR7: # %bb.0: # %entry +; CHECK-PWR7-NEXT:mtfsb0 10 +; CHECK-PWR7-NEXT:blr +entry: + tail call void @llvm.ppc.mtfsb0(i32 10) + ret void +} + +; Function Attrs: nounwind +declare void