mirror of
https://github.com/golang/go
synced 2024-11-02 13:42:29 +00:00
8d77e45064
CL 302231 added some optimization rules with instructions CSETM, CSINC, CSINV, and CSNEG, but did not deal with the situation where flag is constant, resulting in some cases that could be more optimized cannot be optimized, and the FlagConstant value is passed to codegen pass. This CL adds these missing rules. Fixes #45359 Change-Id: I700608cfb9a6a768a18d1fd5d374d7e92aa6f838 Reviewed-on: https://go-review.googlesource.com/c/go/+/307650 Reviewed-by: eric fang <eric.fang@arm.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Alberto Donizetti <alb.donizetti@gmail.com> Run-TryBot: eric fang <eric.fang@arm.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: eric fang <eric.fang@arm.com> Trust: Alberto Donizetti <alb.donizetti@gmail.com>
20 lines
320 B
Go
20 lines
320 B
Go
// compile
|
|
|
|
// Copyright 2021 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
func f() {
|
|
var i, j int
|
|
var b bool
|
|
i = -(i &^ i)
|
|
for 1>>uint(i) == 0 {
|
|
_ = func() {
|
|
i, b = 0, true
|
|
}
|
|
_ = b
|
|
i %= j
|
|
}
|
|
}
|