[llvm] r347376 - [PowerPC] Do not use vectors to codegen bswap with Altivec turned off

Nemanja Ivanovic via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 20 18:53:51 PST 2018


Author: nemanjai
Date: Tue Nov 20 18:53:50 2018
New Revision: 347376

URL: http://llvm.org/viewvc/llvm-project?rev=347376&view=rev
Log:
[PowerPC] Do not use vectors to codegen bswap with Altivec turned off

We have efficient codegen on P9 for lowering bswap that involves moving
the value into a vector reg and moving it back. However, the check under
which we custom lowered it did not adequately reflect the actual requirements.
It required only that the subtarget be an implementation of ISA 3.0 since all
compliant implementations have to provide the vector instructions.
However, the kernel builds have a valid use case for -mno-altivec -mcpu=pwr9
(i.e. don't emit vector code, don't have to save vector regs for context
switch). So we should require the correct features for this lowering.
Fixes https://bugs.llvm.org/show_bug.cgi?id=39334

Modified:
    llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
    llvm/trunk/test/CodeGen/PowerPC/bswap64.ll

Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=347376&r1=347375&r2=347376&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Tue Nov 20 18:53:50 2018
@@ -323,12 +323,14 @@ PPCTargetLowering::PPCTargetLowering(con
   // to speed up scalar BSWAP64.
   // CTPOP or CTTZ were introduced in P8/P9 respectively
   setOperationAction(ISD::BSWAP, MVT::i32  , Expand);
-  if (Subtarget.isISA3_0()) {
+  if (Subtarget.hasP9Vector())
     setOperationAction(ISD::BSWAP, MVT::i64  , Custom);
+  else
+    setOperationAction(ISD::BSWAP, MVT::i64  , Expand);
+  if (Subtarget.isISA3_0()) {
     setOperationAction(ISD::CTTZ , MVT::i32  , Legal);
     setOperationAction(ISD::CTTZ , MVT::i64  , Legal);
   } else {
-    setOperationAction(ISD::BSWAP, MVT::i64  , Expand);
     setOperationAction(ISD::CTTZ , MVT::i32  , Expand);
     setOperationAction(ISD::CTTZ , MVT::i64  , Expand);
   }

Modified: llvm/trunk/test/CodeGen/PowerPC/bswap64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/bswap64.ll?rev=347376&r1=347375&r2=347376&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/bswap64.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/bswap64.ll Tue Nov 20 18:53:50 2018
@@ -1,11 +1,35 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=ppc64le-- -mcpu=pwr9 | FileCheck %s
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-unknown \
+; RUN:   -mcpu=pwr9 | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unkknown-unkknown \
+; RUN:   -mcpu=pwr9 -mattr=-altivec | FileCheck %s --check-prefix=NO-ALTIVEC
 
 declare i64 @llvm.bswap.i64(i64)
 
-; CHECK: mtvsrdd
-; CHECK: xxbrd
-; CHECK: mfvsrd
 define i64 @bswap64(i64 %x) {
+; CHECK-LABEL: bswap64:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    mtvsrdd 34, 3, 3
+; CHECK-NEXT:    xxbrd 0, 34
+; CHECK-NEXT:    mfvsrd 3, 0
+; CHECK-NEXT:    blr
+;
+; NO-ALTIVEC-LABEL: bswap64:
+; NO-ALTIVEC:       # %bb.0: # %entry
+; NO-ALTIVEC-NEXT:    rotldi 5, 3, 16
+; NO-ALTIVEC-NEXT:    rotldi 4, 3, 8
+; NO-ALTIVEC-NEXT:    rldimi 4, 5, 8, 48
+; NO-ALTIVEC-NEXT:    rotldi 5, 3, 24
+; NO-ALTIVEC-NEXT:    rldimi 4, 5, 16, 40
+; NO-ALTIVEC-NEXT:    rotldi 5, 3, 32
+; NO-ALTIVEC-NEXT:    rldimi 4, 5, 24, 32
+; NO-ALTIVEC-NEXT:    rotldi 5, 3, 48
+; NO-ALTIVEC-NEXT:    rldimi 4, 5, 40, 16
+; NO-ALTIVEC-NEXT:    rotldi 5, 3, 56
+; NO-ALTIVEC-NEXT:    rldimi 4, 5, 48, 8
+; NO-ALTIVEC-NEXT:    rldimi 4, 3, 56, 0
+; NO-ALTIVEC-NEXT:    mr 3, 4
+; NO-ALTIVEC-NEXT:    blr
 entry:
   %0 = call i64 @llvm.bswap.i64(i64 %x)
   ret i64 %0




More information about the llvm-commits mailing list