Switch over to LLVM 14 for static builds. Keep using LLVM 13 for regular builds for now. This uses a branch of the upstream Espressif branch to fix an issue, see: https://github.com/espressif/llvm-project/pull/59
		
			
				
	
	
		
			159 строки
		
	
	
	
		
			5,4 КиБ
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			159 строки
		
	
	
	
		
			5,4 КиБ
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; ModuleID = 'go1.17.go'
 | 
						|
source_filename = "go1.17.go"
 | 
						|
target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"
 | 
						|
target triple = "wasm32-unknown-wasi"
 | 
						|
 | 
						|
declare noalias nonnull i8* @runtime.alloc(i32, i8*, i8*)
 | 
						|
 | 
						|
declare void @runtime.trackPointer(i8* nocapture readonly, i8*)
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden void @main.init(i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden i8* @main.Add32(i8* %p, i32 %len, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = getelementptr i8, i8* %p, i32 %len
 | 
						|
  call void @runtime.trackPointer(i8* %0, i8* undef) #0
 | 
						|
  ret i8* %0
 | 
						|
}
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden i8* @main.Add64(i8* %p, i64 %len, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = trunc i64 %len to i32
 | 
						|
  %1 = getelementptr i8, i8* %p, i32 %0
 | 
						|
  call void @runtime.trackPointer(i8* %1, i8* undef) #0
 | 
						|
  ret i8* %1
 | 
						|
}
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden [4 x i32]* @main.SliceToArray(i32* %s.data, i32 %s.len, i32 %s.cap, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = icmp ult i32 %s.len, 4
 | 
						|
  br i1 %0, label %slicetoarray.throw, label %slicetoarray.next
 | 
						|
 | 
						|
slicetoarray.throw:                               ; preds = %entry
 | 
						|
  call void @runtime.sliceToArrayPointerPanic(i8* undef) #0
 | 
						|
  unreachable
 | 
						|
 | 
						|
slicetoarray.next:                                ; preds = %entry
 | 
						|
  %1 = bitcast i32* %s.data to [4 x i32]*
 | 
						|
  ret [4 x i32]* %1
 | 
						|
}
 | 
						|
 | 
						|
declare void @runtime.sliceToArrayPointerPanic(i8*)
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden [4 x i32]* @main.SliceToArrayConst(i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %makeslice = call i8* @runtime.alloc(i32 24, i8* nonnull inttoptr (i32 3 to i8*), i8* undef) #0
 | 
						|
  call void @runtime.trackPointer(i8* nonnull %makeslice, i8* undef) #0
 | 
						|
  br i1 false, label %slicetoarray.throw, label %slicetoarray.next
 | 
						|
 | 
						|
slicetoarray.throw:                               ; preds = %entry
 | 
						|
  unreachable
 | 
						|
 | 
						|
slicetoarray.next:                                ; preds = %entry
 | 
						|
  %0 = bitcast i8* %makeslice to [4 x i32]*
 | 
						|
  ret [4 x i32]* %0
 | 
						|
}
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden { i32*, i32, i32 } @main.SliceInt(i32* dereferenceable_or_null(4) %ptr, i32 %len, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = icmp ugt i32 %len, 1073741823
 | 
						|
  %1 = icmp eq i32* %ptr, null
 | 
						|
  %2 = icmp ne i32 %len, 0
 | 
						|
  %3 = and i1 %1, %2
 | 
						|
  %4 = or i1 %3, %0
 | 
						|
  br i1 %4, label %unsafe.Slice.throw, label %unsafe.Slice.next
 | 
						|
 | 
						|
unsafe.Slice.throw:                               ; preds = %entry
 | 
						|
  call void @runtime.unsafeSlicePanic(i8* undef) #0
 | 
						|
  unreachable
 | 
						|
 | 
						|
unsafe.Slice.next:                                ; preds = %entry
 | 
						|
  %5 = insertvalue { i32*, i32, i32 } undef, i32* %ptr, 0
 | 
						|
  %6 = insertvalue { i32*, i32, i32 } %5, i32 %len, 1
 | 
						|
  %7 = insertvalue { i32*, i32, i32 } %6, i32 %len, 2
 | 
						|
  %8 = bitcast i32* %ptr to i8*
 | 
						|
  call void @runtime.trackPointer(i8* %8, i8* undef) #0
 | 
						|
  ret { i32*, i32, i32 } %7
 | 
						|
}
 | 
						|
 | 
						|
declare void @runtime.unsafeSlicePanic(i8*)
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden { i8*, i32, i32 } @main.SliceUint16(i8* dereferenceable_or_null(1) %ptr, i16 %len, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = icmp eq i8* %ptr, null
 | 
						|
  %1 = icmp ne i16 %len, 0
 | 
						|
  %2 = and i1 %0, %1
 | 
						|
  br i1 %2, label %unsafe.Slice.throw, label %unsafe.Slice.next
 | 
						|
 | 
						|
unsafe.Slice.throw:                               ; preds = %entry
 | 
						|
  call void @runtime.unsafeSlicePanic(i8* undef) #0
 | 
						|
  unreachable
 | 
						|
 | 
						|
unsafe.Slice.next:                                ; preds = %entry
 | 
						|
  %3 = zext i16 %len to i32
 | 
						|
  %4 = insertvalue { i8*, i32, i32 } undef, i8* %ptr, 0
 | 
						|
  %5 = insertvalue { i8*, i32, i32 } %4, i32 %3, 1
 | 
						|
  %6 = insertvalue { i8*, i32, i32 } %5, i32 %3, 2
 | 
						|
  call void @runtime.trackPointer(i8* %ptr, i8* undef) #0
 | 
						|
  ret { i8*, i32, i32 } %6
 | 
						|
}
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden { i32*, i32, i32 } @main.SliceUint64(i32* dereferenceable_or_null(4) %ptr, i64 %len, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = icmp ugt i64 %len, 1073741823
 | 
						|
  %1 = icmp eq i32* %ptr, null
 | 
						|
  %2 = icmp ne i64 %len, 0
 | 
						|
  %3 = and i1 %1, %2
 | 
						|
  %4 = or i1 %3, %0
 | 
						|
  br i1 %4, label %unsafe.Slice.throw, label %unsafe.Slice.next
 | 
						|
 | 
						|
unsafe.Slice.throw:                               ; preds = %entry
 | 
						|
  call void @runtime.unsafeSlicePanic(i8* undef) #0
 | 
						|
  unreachable
 | 
						|
 | 
						|
unsafe.Slice.next:                                ; preds = %entry
 | 
						|
  %5 = trunc i64 %len to i32
 | 
						|
  %6 = insertvalue { i32*, i32, i32 } undef, i32* %ptr, 0
 | 
						|
  %7 = insertvalue { i32*, i32, i32 } %6, i32 %5, 1
 | 
						|
  %8 = insertvalue { i32*, i32, i32 } %7, i32 %5, 2
 | 
						|
  %9 = bitcast i32* %ptr to i8*
 | 
						|
  call void @runtime.trackPointer(i8* %9, i8* undef) #0
 | 
						|
  ret { i32*, i32, i32 } %8
 | 
						|
}
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define hidden { i32*, i32, i32 } @main.SliceInt64(i32* dereferenceable_or_null(4) %ptr, i64 %len, i8* %context) unnamed_addr #0 {
 | 
						|
entry:
 | 
						|
  %0 = icmp ugt i64 %len, 1073741823
 | 
						|
  %1 = icmp eq i32* %ptr, null
 | 
						|
  %2 = icmp ne i64 %len, 0
 | 
						|
  %3 = and i1 %1, %2
 | 
						|
  %4 = or i1 %3, %0
 | 
						|
  br i1 %4, label %unsafe.Slice.throw, label %unsafe.Slice.next
 | 
						|
 | 
						|
unsafe.Slice.throw:                               ; preds = %entry
 | 
						|
  call void @runtime.unsafeSlicePanic(i8* undef) #0
 | 
						|
  unreachable
 | 
						|
 | 
						|
unsafe.Slice.next:                                ; preds = %entry
 | 
						|
  %5 = trunc i64 %len to i32
 | 
						|
  %6 = insertvalue { i32*, i32, i32 } undef, i32* %ptr, 0
 | 
						|
  %7 = insertvalue { i32*, i32, i32 } %6, i32 %5, 1
 | 
						|
  %8 = insertvalue { i32*, i32, i32 } %7, i32 %5, 2
 | 
						|
  %9 = bitcast i32* %ptr to i8*
 | 
						|
  call void @runtime.trackPointer(i8* %9, i8* undef) #0
 | 
						|
  ret { i32*, i32, i32 } %8
 | 
						|
}
 | 
						|
 | 
						|
attributes #0 = { nounwind }
 |