transform: optimize string comparisons against ""

This optimizes a common pattern like:

    if s != "" {
        ...
    }

to:

    if len(s) != 0 {
        ...
    }

This avoids a runtime call and thus produces slightly better code.
This commit is contained in:
Ayke van Laethem
2021-03-08 13:39:46 +01:00
committed by Ron Evans
parent 13db2c13e5
commit f9865a08bc
5 changed files with 77 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "armv7m-none-eabi"
@zeroString = constant [0 x i8] zeroinitializer
declare i1 @runtime.stringEqual(i8*, i32, i8*, i32, i8*, i8*)
define i1 @main.stringCompareEqualConstantZero(i8* %s1.data, i32 %s1.len, i8* %context, i8* %parentHandle) {
entry:
%0 = call i1 @runtime.stringEqual(i8* %s1.data, i32 %s1.len, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @zeroString, i32 0, i32 0), i32 0, i8* undef, i8* null)
ret i1 %0
}
define i1 @main.stringCompareUnequalConstantZero(i8* %s1.data, i32 %s1.len, i8* %context, i8* %parentHandle) {
entry:
%0 = call i1 @runtime.stringEqual(i8* %s1.data, i32 %s1.len, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @zeroString, i32 0, i32 0), i32 0, i8* undef, i8* null)
%1 = xor i1 %0, true
ret i1 %1
}
+19
View File
@@ -0,0 +1,19 @@
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "armv7m-none-eabi"
@zeroString = constant [0 x i8] zeroinitializer
declare i1 @runtime.stringEqual(i8*, i32, i8*, i32, i8*, i8*)
define i1 @main.stringCompareEqualConstantZero(i8* %s1.data, i32 %s1.len, i8* %context, i8* %parentHandle) {
entry:
%0 = icmp eq i32 %s1.len, 0
ret i1 %0
}
define i1 @main.stringCompareUnequalConstantZero(i8* %s1.data, i32 %s1.len, i8* %context, i8* %parentHandle) {
entry:
%0 = icmp eq i32 %s1.len, 0
%1 = xor i1 %0, true
ret i1 %1
}