Skip to content

Commit a84a954

Browse files
committed
transform: add byte slice string length tests
1 parent b412c70 commit a84a954

3 files changed

Lines changed: 69 additions & 0 deletions

File tree

transform/rtcalls_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,10 @@ func TestOptimizeStringFromBytesStringLess(t *testing.T) {
3636
transform.OptimizeStringFromBytes(mod)
3737
})
3838
}
39+
40+
func TestOptimizeStringFromBytesLen(t *testing.T) {
41+
t.Parallel()
42+
testTransform(t, "testdata/stringfrombytes-len", func(mod llvm.Module) {
43+
// TODO: optimize the []byte-to-string conversion away.
44+
})
45+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
2+
target triple = "armv7m-none-eabi"
3+
4+
%runtime._string = type { ptr, i32 }
5+
6+
declare %runtime._string @runtime.stringFromBytes(ptr, i32, i32, ptr)
7+
8+
declare void @runtime.trackPointer(ptr, ptr, ptr)
9+
10+
declare void @useString(ptr, i32)
11+
12+
define i32 @main.stringFromBytesLen(ptr %a.data, i32 %a.len, i32 %a.cap, ptr %context) {
13+
entry:
14+
%stackalloc = alloca i8, align 1
15+
%0 = call %runtime._string @runtime.stringFromBytes(ptr %a.data, i32 %a.len, i32 %a.cap, ptr undef)
16+
%1 = extractvalue %runtime._string %0, 0
17+
call void @runtime.trackPointer(ptr %1, ptr %stackalloc, ptr undef)
18+
%2 = extractvalue %runtime._string %0, 1
19+
%len = extractvalue %runtime._string %0, 1
20+
ret i32 %len
21+
}
22+
23+
define i32 @main.keepStringConversion(ptr %a.data, i32 %a.len, i32 %a.cap, ptr %context) {
24+
entry:
25+
%0 = call %runtime._string @runtime.stringFromBytes(ptr %a.data, i32 %a.len, i32 %a.cap, ptr undef)
26+
%1 = extractvalue %runtime._string %0, 0
27+
%2 = extractvalue %runtime._string %0, 1
28+
call void @useString(ptr %1, i32 %2)
29+
%len = extractvalue %runtime._string %0, 1
30+
ret i32 %len
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
2+
target triple = "armv7m-none-eabi"
3+
4+
%runtime._string = type { ptr, i32 }
5+
6+
declare %runtime._string @runtime.stringFromBytes(ptr, i32, i32, ptr)
7+
8+
declare void @runtime.trackPointer(ptr, ptr, ptr)
9+
10+
declare void @useString(ptr, i32)
11+
12+
define i32 @main.stringFromBytesLen(ptr %a.data, i32 %a.len, i32 %a.cap, ptr %context) {
13+
entry:
14+
%stackalloc = alloca i8, align 1
15+
%0 = call %runtime._string @runtime.stringFromBytes(ptr %a.data, i32 %a.len, i32 %a.cap, ptr undef)
16+
%1 = extractvalue %runtime._string %0, 0
17+
call void @runtime.trackPointer(ptr %1, ptr %stackalloc, ptr undef)
18+
%2 = extractvalue %runtime._string %0, 1
19+
%len = extractvalue %runtime._string %0, 1
20+
ret i32 %len
21+
}
22+
23+
define i32 @main.keepStringConversion(ptr %a.data, i32 %a.len, i32 %a.cap, ptr %context) {
24+
entry:
25+
%0 = call %runtime._string @runtime.stringFromBytes(ptr %a.data, i32 %a.len, i32 %a.cap, ptr undef)
26+
%1 = extractvalue %runtime._string %0, 0
27+
%2 = extractvalue %runtime._string %0, 1
28+
call void @useString(ptr %1, i32 %2)
29+
%len = extractvalue %runtime._string %0, 1
30+
ret i32 %len
31+
}

0 commit comments

Comments
 (0)