LLVM CODE GEN FAILED FOR PROCEDURE: src.render_target_end define internal void @src.render_target_end(%src.Render_Target* %0, %sdl2.Window* %1, i32 %2, i32 %3, i8* noalias nocapture nonnull %__.context_ptr) { decls: %4 = alloca %src.Render_Target*, align 8 %5 = alloca %sdl2.Window*, align 8 %6 = alloca i32, align 4 %7 = alloca i32, align 4 %8 = alloca i32, align 4 %9 = alloca i64, align 8 %10 = alloca i64, align 8 %11 = alloca i64, align 8 %12 = alloca %src.Render_Group, align 8 %13 = alloca { %src.Render_Group*, i64, i64, %runtime.Allocator }*, align 8 %14 = alloca i64, align 8 %15 = alloca { <2 x float>, <2 x float> }, align 8 %16 = alloca i64, align 8 %17 = alloca %src.Render_Vertex*, align 8 %18 = alloca [16 x float], align 32 %19 = alloca [16 x float], align 32 br label %entry entry: ; preds = %decls store %src.Render_Target* %0, %src.Render_Target** %4, align 8 store %sdl2.Window* %1, %sdl2.Window** %5, align 8 store i32 %2, i32* %6, align 4 store i32 %3, i32* %7, align 4 %20 = bitcast i8* %__.context_ptr to %runtime.Context* %21 = load %sdl2.Window*, %sdl2.Window** %5, align 8 %22 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %23 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %22, i32 0, i32 18 %24 = load i8*, i8** %23, align 8 %25 = call i32 @SDL_GL_MakeCurrent(%sdl2.Window* %21, i8* %24) call void @odin_gl.Enable(i32 3089) call void @odin_gl.Enable(i32 3042) call void @odin_gl.Enable(i32 32925) call void @odin_gl.Disable(i32 2884) call void @odin_gl.Disable(i32 2929) call void @odin_gl.BlendFuncSeparate(i32 770, i32 771, i32 1, i32 0) %26 = load i32, i32* %6, align 4 %27 = load i32, i32* %7, align 4 call void @odin_gl.Viewport(i32 0, i32 0, i32 %26, i32 %27) %28 = load i32, i32* %6, align 4 %29 = load i32, i32* %7, align 4 call void @odin_gl.Scissor(i32 0, i32 0, i32 %28, i32 %29) call void @odin_gl.ClearColor(float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00) call void @odin_gl.Clear(i32 16384) call void @odin_gl.BindTexture(i32 3553, i32 0) %30 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %31 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %30, i32 0, i32 9 %32 = load i32, i32* %31, align 4 call void @odin_gl.EnableVertexAttribArray(i32 %32) %33 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %34 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %33, i32 0, i32 10 %35 = load i32, i32* %34, align 4 call void @odin_gl.EnableVertexAttribArray(i32 %35) %36 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %37 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %36, i32 0, i32 11 %38 = load i32, i32* %37, align 4 call void @odin_gl.EnableVertexAttribArray(i32 %38) %39 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %40 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %39, i32 0, i32 12 %41 = load i32, i32* %40, align 4 call void @odin_gl.EnableVertexAttribArray(i32 %41) %42 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %43 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %42, i32 0, i32 13 %44 = load i32, i32* %43, align 4 call void @odin_gl.EnableVertexAttribArray(i32 %44) %45 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %46 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %45, i32 0, i32 14 %47 = load i32, i32* %46, align 4 call void @odin_gl.EnableVertexAttribArray(i32 %47) store i32 36, i32* %8, align 4 %48 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %49 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %48, i32 0, i32 9 %50 = load i32, i32* %49, align 4 %51 = load i32, i32* %8, align 4 call void @odin_gl.VertexAttribPointer(i32 %50, i32 2, i32 5126, i1 true, i32 %51, i64 0) %52 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %53 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %52, i32 0, i32 10 %54 = load i32, i32* %53, align 4 %55 = load i32, i32* %8, align 4 call void @odin_gl.VertexAttribPointer(i32 %54, i32 2, i32 5126, i1 true, i32 %55, i64 8) %56 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %57 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %56, i32 0, i32 11 %58 = load i32, i32* %57, align 4 %59 = load i32, i32* %8, align 4 call void @odin_gl.VertexAttribIPointer(i32 %58, i32 1, i32 5125, i32 %59, i64 16) %60 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %61 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %60, i32 0, i32 12 %62 = load i32, i32* %61, align 4 %63 = load i32, i32* %8, align 4 call void @odin_gl.VertexAttribIPointer(i32 %62, i32 1, i32 5125, i32 %63, i64 20) %64 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %65 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %64, i32 0, i32 13 %66 = load i32, i32* %65, align 4 %67 = load i32, i32* %8, align 4 call void @odin_gl.VertexAttribPointer(i32 %66, i32 2, i32 5126, i1 true, i32 %67, i64 24) %68 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %69 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %68, i32 0, i32 14 %70 = load i32, i32* %69, align 4 %71 = load i32, i32* %8, align 4 call void @odin_gl.VertexAttribIPointer(i32 %70, i32 1, i32 5125, i32 %71, i64 32) %72 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %73 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %72, i32 0, i32 16 %74 = load i8, i8* %73, align 1 %75 = trunc i8 %74 to i1 br i1 %75, label %if.then, label %if.done if.then: ; preds = %entry %76 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %77 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %76, i32 0, i32 15 %78 = getelementptr [4 x %src.Render_Texture], [4 x %src.Render_Texture]* %77, i64 0, i64 0 %79 = bitcast %runtime.Context* %20 to i8* call void @src.texture_update(%src.Render_Texture* %78, i8* %79) %80 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %81 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %80, i32 0, i32 16 store i8 0, i8* %81, align 1 br label %if.done if.done: ; preds = %if.then, %entry store i64 0, i64* %9, align 8 %82 = load { i64*, i64 }, { i64*, i64 }* getelementptr (%runtime.Type_Info_Enum, %runtime.Type_Info_Enum* bitcast ({ [15 x i64], i64 }* getelementptr inbounds ([264 x %runtime.Type_Info], [264 x %runtime.Type_Info]* @"__$type_info_data", i64 0, i64 211, i32 5) to %runtime.Type_Info_Enum*), i64 0, i32 2), align 8 %83 = load i64*, i64** getelementptr (%runtime.Type_Info_Enum, %runtime.Type_Info_Enum* bitcast ({ [15 x i64], i64 }* getelementptr inbounds ([264 x %runtime.Type_Info], [264 x %runtime.Type_Info]* @"__$type_info_data", i64 0, i64 211, i32 5) to %runtime.Type_Info_Enum*), i64 0, i32 2, i32 0), align 8 store i64 0, i64* %10, align 8 br label %for.enum.loop for.enum.loop: ; preds = %for.enum.body, %if.done %84 = load i64, i64* %10, align 8 %85 = icmp slt i64 %84, 4 br i1 %85, label %for.enum.body, label %for.enum.done for.enum.body: ; preds = %for.enum.loop %86 = getelementptr i64, i64* %83, i64 %84 %87 = load i64, i64* %10, align 8 %88 = add i64 %87, 1 store i64 %88, i64* %10, align 8 %89 = load i64, i64* %86, align 8 store i64 %89, i64* %11, align 8 %90 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %91 = load i64, i64* %11, align 8 %92 = bitcast %runtime.Context* %20 to i8* call void @src.texture_bind(%src.Render_Target* %90, i64 %91, i8* %92) br label %for.enum.loop for.enum.done: ; preds = %for.enum.loop %93 = bitcast %src.Render_Group* %12 to i8* call void @llvm.memset.p0i8.i64(i8* %93, i8 0, i64 32, i1 false) %94 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %95 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %94, i32 0, i32 0 store { %src.Render_Group*, i64, i64, %runtime.Allocator }* %95, { %src.Render_Group*, i64, i64, %runtime.Allocator }** %13, align 8 %96 = load { %src.Render_Group*, i64, i64, %runtime.Allocator }*, { %src.Render_Group*, i64, i64, %runtime.Allocator }** %13, align 8 %97 = getelementptr inbounds { %src.Render_Group*, i64, i64, %runtime.Allocator }, { %src.Render_Group*, i64, i64, %runtime.Allocator }* %96, i32 0, i32 1 store i64 -1, i64* %14, align 8 br label %for.index.loop for.index.loop: ; preds = %if.done2, %for.enum.done %98 = load i64, i64* %14, align 8 %99 = add i64 %98, 1 store i64 %99, i64* %14, align 8 %100 = load i64, i64* %97, align 8 %101 = icmp slt i64 %99, %100 br i1 %101, label %for.index.body, label %for.index.done for.index.body: ; preds = %for.index.loop %102 = load i64, i64* %14, align 8 %103 = getelementptr inbounds { %src.Render_Group*, i64, i64, %runtime.Allocator }, { %src.Render_Group*, i64, i64, %runtime.Allocator }* %96, i32 0, i32 0 %104 = load %src.Render_Group*, %src.Render_Group** %103, align 8 %105 = getelementptr %src.Render_Group, %src.Render_Group* %104, i64 %102 %106 = load %src.Render_Group, %src.Render_Group* %105, align 8 %107 = load i32, i32* %7, align 4 %108 = getelementptr inbounds %src.Render_Group, %src.Render_Group* %105, i32 0, i32 0 %109 = load %src.Rect, %src.Rect* %108, align 4 %110 = bitcast { <2 x float>, <2 x float> }* %15 to %src.Rect* store %src.Rect %109, %src.Rect* %110, align 4 %111 = load { <2 x float>, <2 x float> }, { <2 x float>, <2 x float> }* %15, align 8 %112 = bitcast %runtime.Context* %20 to i8* call void @src.rect_scissor(i32 %107, { <2 x float>, <2 x float> } %111, i8* %112) %113 = getelementptr inbounds %src.Render_Group, %src.Render_Group* %105, i32 0, i32 2 %114 = load i64, i64* %113, align 8 %115 = getelementptr inbounds %src.Render_Group, %src.Render_Group* %105, i32 0, i32 1 %116 = load i64, i64* %115, align 8 %117 = sub i64 %114, %116 store i64 %117, i64* %16, align 8 %118 = load i64, i64* %16, align 8 %119 = icmp ne i64 %118, 0 %120 = zext i1 %119 to i8 %121 = trunc i8 %120 to i1 br i1 %121, label %if.then1, label %if.done2 if.then1: ; preds = %for.index.body %122 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %123 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %122, i32 0, i32 1 %124 = load { %src.Render_Vertex*, i64 }, { %src.Render_Vertex*, i64 }* %123, align 8 %125 = bitcast { %src.Render_Vertex*, i64 }* %123 to { i64, i64 }* %126 = load { i64, i64 }, { i64, i64 }* %125, align 8 %127 = call %src.Render_Vertex* @runtime.raw_slice_data-50608({ i64, i64 } %126) %128 = getelementptr inbounds %src.Render_Group, %src.Render_Group* %105, i32 0, i32 1 %129 = load i64, i64* %128, align 8 %130 = getelementptr %src.Render_Vertex*, %src.Render_Vertex* %127, i64 %129 store %src.Render_Vertex** %130, %src.Render_Vertex** %17, align 8 %131 = load i64, i64* %16, align 8 %132 = mul i64 %131, 36 %133 = load %src.Render_Vertex*, %src.Render_Vertex** %17, align 8 %134 = bitcast %src.Render_Vertex* %133 to i8* call void @odin_gl.BufferData(i32 34962, i64 %132, i8* %134, i32 35040) %135 = load i32, i32* %6, align 4 %136 = sitofp i32 %135 to float %137 = load i32, i32* %7, align 4 %138 = sitofp i32 %137 to float %139 = bitcast [16 x float]* %19 to i8* call void @llvm.memset.p0i8.i64(i8* %139, i8 0, i64 64, i1 false) call void @math_linalg_glsl.mat4Ortho3d([16 x float]* sret %19, float 0.000000e+00, float %136, float %138, float 0.000000e+00, float -1.000000e+00, float 1.000000e+00) %140 = load [16 x float], [16 x float]* %19, align 4 store [16 x float] %140, [16 x float]* %18, align 4 %141 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %142 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %141, i32 0, i32 6 %143 = load i32, i32* %142, align 4 %144 = getelementptr [16 x float], [16 x float]* %18, i64 0, i64 0 %145 = bitcast float* %144 to [4 x float]* %146 = getelementptr [4 x float], [4 x float]* %145, i64 0, i64 0 call void @odin_gl.UniformMatrix4fv(i32 %143, i32 1, i1 false, float* %146) %147 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %148 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %147, i32 0, i32 7 %149 = load i32, i32* %148, align 4 %150 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %151 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %150, i32 0, i32 8 %152 = getelementptr [4 x i8], [4 x i8]* %151, i64 0, i64 0 %153 = load i8, i8* %152, align 1 %154 = uitofp i8 %153 to float %155 = fdiv float %154, 2.550000e+02 %156 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %157 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %156, i32 0, i32 8 %158 = getelementptr [4 x i8], [4 x i8]* %157, i64 0, i64 1 %159 = load i8, i8* %158, align 1 %160 = uitofp i8 %159 to float %161 = fdiv float %160, 2.550000e+02 %162 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %163 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %162, i32 0, i32 8 %164 = getelementptr [4 x i8], [4 x i8]* %163, i64 0, i64 2 %165 = load i8, i8* %164, align 1 %166 = uitofp i8 %165 to float %167 = fdiv float %166, 2.550000e+02 %168 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %169 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %168, i32 0, i32 8 %170 = getelementptr [4 x i8], [4 x i8]* %169, i64 0, i64 3 %171 = load i8, i8* %170, align 1 %172 = uitofp i8 %171 to float %173 = fdiv float %172, 2.550000e+02 call void @odin_gl.Uniform4f(i32 %149, float %155, float %161, float %167, float %173) %174 = load i64, i64* %16, align 8 %175 = trunc i64 %174 to i32 call void @odin_gl.DrawArrays(i32 4, i32 0, i32 %175) br label %if.done2 if.done2: ; preds = %if.then1, %for.index.body br label %for.index.loop for.index.done: ; preds = %for.index.loop %176 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %177 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %176, i32 0, i32 9 %178 = load i32, i32* %177, align 4 call void @odin_gl.DisableVertexAttribArray(i32 %178) %179 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %180 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %179, i32 0, i32 10 %181 = load i32, i32* %180, align 4 call void @odin_gl.DisableVertexAttribArray(i32 %181) %182 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %183 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %182, i32 0, i32 11 %184 = load i32, i32* %183, align 4 call void @odin_gl.DisableVertexAttribArray(i32 %184) %185 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %186 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %185, i32 0, i32 12 %187 = load i32, i32* %186, align 4 call void @odin_gl.DisableVertexAttribArray(i32 %187) %188 = load %src.Render_Target*, %src.Render_Target** %4, align 8 %189 = getelementptr inbounds %src.Render_Target, %src.Render_Target* %188, i32 0, i32 14 %190 = load i32, i32* %189, align 4 call void @odin_gl.DisableVertexAttribArray(i32 %190) call void @odin_gl.Flush() %191 = load %sdl2.Window*, %sdl2.Window** %5, align 8 call void @SDL_GL_SwapWindow(%sdl2.Window* %191) ret void } Stored value type does not match pointer operand type! store %src.Render_Vertex** %130, %src.Render_Vertex** %17, align 8 %src.Render_Vertex*make: ***