1Pull in r200141 from upstream llvm trunk (by Jakob Stoklund Olesen): 2 3 Clean up the Legal/Expand logic for SPARC popc. 4 5Introduced here: http://svnweb.freebsd.org/changeset/base/262261 6 7Index: lib/Target/Sparc/SparcSubtarget.cpp 8=================================================================== 9--- lib/Target/Sparc/SparcSubtarget.cpp 10+++ lib/Target/Sparc/SparcSubtarget.cpp 11@@ -41,6 +41,10 @@ SparcSubtarget::SparcSubtarget(const std::string & 12 13 // Parse features string. 14 ParseSubtargetFeatures(CPUName, FS); 15+ 16+ // Popc is a v9-only instruction. 17+ if (!IsV9) 18+ UsePopc = false; 19 } 20 21 22Index: lib/Target/Sparc/SparcISelLowering.cpp 23=================================================================== 24--- lib/Target/Sparc/SparcISelLowering.cpp 25+++ lib/Target/Sparc/SparcISelLowering.cpp 26@@ -1461,8 +1461,8 @@ SparcTargetLowering::SparcTargetLowering(TargetMac 27 setOperationAction(ISD::BR_CC, MVT::i64, Custom); 28 setOperationAction(ISD::SELECT_CC, MVT::i64, Custom); 29 30- if (Subtarget->usePopc()) 31- setOperationAction(ISD::CTPOP, MVT::i64, Legal); 32+ setOperationAction(ISD::CTPOP, MVT::i64, 33+ Subtarget->usePopc() ? Legal : Expand); 34 setOperationAction(ISD::CTTZ , MVT::i64, Expand); 35 setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i64, Expand); 36 setOperationAction(ISD::CTLZ , MVT::i64, Expand); 37@@ -1518,7 +1518,6 @@ SparcTargetLowering::SparcTargetLowering(TargetMac 38 setOperationAction(ISD::FSINCOS, MVT::f32, Expand); 39 setOperationAction(ISD::FREM , MVT::f32, Expand); 40 setOperationAction(ISD::FMA , MVT::f32, Expand); 41- setOperationAction(ISD::CTPOP, MVT::i32, Expand); 42 setOperationAction(ISD::CTTZ , MVT::i32, Expand); 43 setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i32, Expand); 44 setOperationAction(ISD::CTLZ , MVT::i32, Expand); 45@@ -1568,8 +1567,8 @@ SparcTargetLowering::SparcTargetLowering(TargetMac 46 47 setStackPointerRegisterToSaveRestore(SP::O6); 48 49- if (Subtarget->isV9() && Subtarget->usePopc()) 50- setOperationAction(ISD::CTPOP, MVT::i32, Legal); 51+ setOperationAction(ISD::CTPOP, MVT::i32, 52+ Subtarget->usePopc() ? Legal : Expand); 53 54 if (Subtarget->isV9() && Subtarget->hasHardQuad()) { 55 setOperationAction(ISD::LOAD, MVT::f128, Legal); 56Index: test/CodeGen/SPARC/64bit.ll 57=================================================================== 58--- test/CodeGen/SPARC/64bit.ll 59+++ test/CodeGen/SPARC/64bit.ll 60@@ -1,5 +1,5 @@ 61-; RUN: llc < %s -march=sparcv9 -disable-sparc-delay-filler -disable-sparc-leaf-proc | FileCheck %s 62-; RUN: llc < %s -march=sparcv9 | FileCheck %s -check-prefix=OPT 63+; RUN: llc < %s -march=sparcv9 -mattr=+popc -disable-sparc-delay-filler -disable-sparc-leaf-proc | FileCheck %s 64+; RUN: llc < %s -march=sparcv9 -mattr=+popc | FileCheck %s -check-prefix=OPT 65 66 ; CHECK-LABEL: ret2: 67 ; CHECK: or %g0, %i1, %i0 68