Skip to content

Commit

Permalink
Optimize comparisons to empty string.
Browse files Browse the repository at this point in the history
Geo-mean performance improvement of 0.2% (-0.3% - 0.9% @ 95% CI).

Differential Revision: http://reviews.llvm.org/D6569

llvm-svn: 223728
  • Loading branch information
pcc committed Dec 9, 2014
1 parent c8cf2b8 commit c5b84a5
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions llgo/irgen/strings.go
Expand Up @@ -24,7 +24,23 @@ func (fr *frame) concatenateStrings(lhs, rhs *govalue) *govalue {
return newValue(result[0], types.Typ[types.String])
}

func (fr *frame) compareStringEmpty(v llvm.Value) *govalue {
len := fr.builder.CreateExtractValue(v, 1, "")
result := fr.builder.CreateIsNull(len, "")
result = fr.builder.CreateZExt(result, llvm.Int8Type(), "")
return newValue(result, types.Typ[types.Bool])
}

func (fr *frame) compareStrings(lhs, rhs *govalue, op token.Token) *govalue {
if op == token.EQL {
if lhs.value.IsNull() {
return fr.compareStringEmpty(rhs.value)
}
if rhs.value.IsNull() {
return fr.compareStringEmpty(lhs.value)
}
}

result := fr.runtime.strcmp.call(fr, lhs.value, rhs.value)[0]
zero := llvm.ConstNull(fr.types.inttype)
var pred llvm.IntPredicate
Expand Down

0 comments on commit c5b84a5

Please sign in to comment.