Skip to content
Snippets Groups Projects
  • Lynn Boger's avatar
    80834af2
    cmd/compile: avoid ANDCCconst on PPC64 if condition not needed · 80834af2
    Lynn Boger authored
    In the PPC64 ISA, the instruction to do an 'and' operation
    using an immediate constant is only available in the form that
    also sets CR0 (i.e. clobbers the condition register.) This means
    CR0 is being clobbered unnecessarily in many cases. That
    affects some decisions made during some compiler passes
    that check for it.
    
    In those cases when the constant used by the ANDCC is a right
    justified consecutive set of bits, a shift instruction can
    be used which has the same effect if CR0 does not need to be
    set. The rule to do that has been added to the late rules file
    after other rules using ANDCCconst have been processed in the
    main rules file.
    
    Some codegen tests had to be updated since ANDCC is no
    longer generated for some cases. A new test case was added to
    verify the ANDCC is present if the results for both the AND
    and CR0 are used.
    
    Change-Id: I304f607c039a458e2d67d25351dd00aea72ba542
    Reviewed-on: https://go-review.googlesource.com/c/go/+/531435
    
    
    Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
    Reviewed-by: default avatarPaul Murphy <murp@ibm.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    Reviewed-by: default avatarCarlos Amedee <carlos@golang.org>
    Reviewed-by: default avatarJayanth Krishnamurthy <jayanth.krishnamurthy@ibm.com>
    TryBot-Result: Gopher Robot <gobot@golang.org>
    Reviewed-by: default avatarDmitri Shuralyov <dmitshur@google.com>
    80834af2
    History
    cmd/compile: avoid ANDCCconst on PPC64 if condition not needed
    Lynn Boger authored
    In the PPC64 ISA, the instruction to do an 'and' operation
    using an immediate constant is only available in the form that
    also sets CR0 (i.e. clobbers the condition register.) This means
    CR0 is being clobbered unnecessarily in many cases. That
    affects some decisions made during some compiler passes
    that check for it.
    
    In those cases when the constant used by the ANDCC is a right
    justified consecutive set of bits, a shift instruction can
    be used which has the same effect if CR0 does not need to be
    set. The rule to do that has been added to the late rules file
    after other rules using ANDCCconst have been processed in the
    main rules file.
    
    Some codegen tests had to be updated since ANDCC is no
    longer generated for some cases. A new test case was added to
    verify the ANDCC is present if the results for both the AND
    and CR0 are used.
    
    Change-Id: I304f607c039a458e2d67d25351dd00aea72ba542
    Reviewed-on: https://go-review.googlesource.com/c/go/+/531435
    
    
    Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
    Reviewed-by: default avatarPaul Murphy <murp@ibm.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    Reviewed-by: default avatarCarlos Amedee <carlos@golang.org>
    Reviewed-by: default avatarJayanth Krishnamurthy <jayanth.krishnamurthy@ibm.com>
    TryBot-Result: Gopher Robot <gobot@golang.org>
    Reviewed-by: default avatarDmitri Shuralyov <dmitshur@google.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.