ssa: index/indexAddr check max

This commit is contained in:
visualfc
2024-06-17 21:00:05 +08:00
parent e35d70f338
commit 29ba00f370
14 changed files with 694 additions and 406 deletions

View File

@@ -788,16 +788,19 @@ _llgo_2: ; preds = %_llgo_0
%11 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 0
%12 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %11, align 8
%13 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %12, 0
%14 = icmp slt i64 %10, 0
call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %14)
%15 = getelementptr inbounds i8, ptr %13, i64 %10
%16 = load i8, ptr %15, align 1
%17 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
%18 = load i64, ptr %17, align 4
%19 = add i64 %18, 1
%14 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %12, 1
%15 = icmp slt i64 %10, 0
%16 = icmp sge i64 %10, %14
%17 = or i1 %16, %15
call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %17)
%18 = getelementptr inbounds i8, ptr %13, i64 %10
%19 = load i8, ptr %18, align 1
%20 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
store i64 %19, ptr %20, align 4
%mrv1 = insertvalue { i8, %"github.com/goplus/llgo/internal/runtime.iface" } poison, i8 %16, 0
%21 = load i64, ptr %20, align 4
%22 = add i64 %21, 1
%23 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
store i64 %22, ptr %23, align 4
%mrv1 = insertvalue { i8, %"github.com/goplus/llgo/internal/runtime.iface" } poison, i8 %19, 0
%mrv2 = insertvalue { i8, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv1, %"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer, 1
ret { i8, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv2
}
@@ -829,42 +832,45 @@ _llgo_2: ; preds = %_llgo_0
%14 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 0
%15 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %14, align 8
%16 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %15, 0
%17 = icmp slt i64 %13, 0
call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %17)
%18 = getelementptr inbounds i8, ptr %16, i64 %13
%19 = load i8, ptr %18, align 1
%20 = icmp ult i8 %19, -128
br i1 %20, label %_llgo_3, label %_llgo_4
%17 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %15, 1
%18 = icmp slt i64 %13, 0
%19 = icmp sge i64 %13, %17
%20 = or i1 %19, %18
call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %20)
%21 = getelementptr inbounds i8, ptr %16, i64 %13
%22 = load i8, ptr %21, align 1
%23 = icmp ult i8 %22, -128
br i1 %23, label %_llgo_3, label %_llgo_4
_llgo_3: ; preds = %_llgo_2
%21 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
%22 = load i64, ptr %21, align 4
%23 = add i64 %22, 1
%24 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
store i64 %23, ptr %24, align 4
%25 = sext i8 %19 to i32
%mrv1 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } poison, i32 %25, 0
%25 = load i64, ptr %24, align 4
%26 = add i64 %25, 1
%27 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
store i64 %26, ptr %27, align 4
%28 = sext i8 %22 to i32
%mrv1 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } poison, i32 %28, 0
%mrv2 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv1, i64 1, 1
%mrv3 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv2, %"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer, 2
ret { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv3
_llgo_4: ; preds = %_llgo_2
%26 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 0
%27 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %26, align 8
%28 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
%29 = load i64, ptr %28, align 4
%30 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %27, 1
%31 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %27, i64 %29, i64 %30)
%32 = call { i32, i64 } @"unicode/utf8.DecodeRuneInString"(%"github.com/goplus/llgo/internal/runtime.String" %31)
%33 = extractvalue { i32, i64 } %32, 0
%34 = extractvalue { i32, i64 } %32, 1
%35 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
%36 = load i64, ptr %35, align 4
%37 = add i64 %36, %34
%29 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 0
%30 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %29, align 8
%31 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
%32 = load i64, ptr %31, align 4
%33 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %30, 1
%34 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %30, i64 %32, i64 %33)
%35 = call { i32, i64 } @"unicode/utf8.DecodeRuneInString"(%"github.com/goplus/llgo/internal/runtime.String" %34)
%36 = extractvalue { i32, i64 } %35, 0
%37 = extractvalue { i32, i64 } %35, 1
%38 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
store i64 %37, ptr %38, align 4
%mrv4 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } poison, i32 %33, 0
%mrv5 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv4, i64 %34, 1
%39 = load i64, ptr %38, align 4
%40 = add i64 %39, %37
%41 = getelementptr inbounds %main.stringReader, ptr %0, i32 0, i32 1
store i64 %40, ptr %41, align 4
%mrv4 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } poison, i32 %36, 0
%mrv5 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv4, i64 %37, 1
%mrv6 = insertvalue { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv5, %"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer, 2
ret { i32, i64, %"github.com/goplus/llgo/internal/runtime.iface" } %mrv6
}