transform: optimize range over []byte(string)

Fixes #2700
This commit is contained in:
Elias Naur
2024-10-14 18:59:07 +02:00
committed by Ayke
parent 45cc5b58cd
commit 539cc5c47b
3 changed files with 19 additions and 3 deletions
+6 -3
View File
@@ -38,15 +38,18 @@ func hasFlag(call, param llvm.Value, kind string) bool {
func isReadOnly(value llvm.Value) bool {
uses := getUses(value)
for _, use := range uses {
if !use.IsAGetElementPtrInst().IsNil() {
switch {
case !use.IsAGetElementPtrInst().IsNil():
if !isReadOnly(use) {
return false
}
} else if !use.IsACallInst().IsNil() {
case !use.IsACallInst().IsNil():
if !hasFlag(use, value, "readonly") {
return false
}
} else {
case !use.IsALoadInst().IsNil():
// Loads are read-only.
default:
// Unknown instruction, might not be readonly.
return false
}