Skip to content

Instantly share code, notes, and snippets.

@karolherbst
Created September 26, 2022 02:34
Show Gist options
  • Save karolherbst/15b1f044db27c73d5526c69e3612bfcc to your computer and use it in GitHub Desktop.
Save karolherbst/15b1f044db27c73d5526c69e3612bfcc to your computer and use it in GitHub Desktop.
; ModuleID = 'mesa-shader'
source_filename = "mesa-shader"
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7"
target triple = "amdgcn--"
@compute_lds = external addrspace(3) global [0 x i8], align 65536
define amdgpu_cs void @main(<4 x i32> addrspace(6)* inreg noalias align 4 dereferenceable(18446744073709551615) %0, <8 x i32> addrspace(6)* inreg noalias align 4 dereferenceable(18446744073709551615) %1, float addrspace(6)* inreg noalias align 4 dereferenceable(18446744073709551615) %2, <8 x i32> addrspace(6)* inreg noalias align 4 dereferenceable(18446744073709551615) %3, <3 x i32> inreg %4, i32 inreg %5, i32 inreg %6, i32 inreg %7, i32 inreg %8, <3 x i32> %9) #0 {
main_body:
%10 = ptrtoint float addrspace(6)* %2 to i32
%11 = insertelement <4 x i32> undef, i32 %10, i32 0
%12 = insertelement <4 x i32> %11, i32 32768, i32 1
%13 = insertelement <4 x i32> %12, i32 1024, i32 2
%14 = insertelement <4 x i32> %13, i32 822177708, i32 3
%15 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %14, i32 0, i32 0) #2
%16 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %14, i32 4, i32 0) #2
%17 = insertelement <2 x float> undef, float %15, i32 0
%18 = insertelement <2 x float> %17, float %16, i32 1
%19 = bitcast <2 x float> %18 to <1 x i64>
%20 = bitcast <1 x i64> %19 to i64
%21 = ptrtoint float addrspace(6)* %2 to i32
%22 = insertelement <4 x i32> undef, i32 %21, i32 0
%23 = insertelement <4 x i32> %22, i32 32768, i32 1
%24 = insertelement <4 x i32> %23, i32 1024, i32 2
%25 = insertelement <4 x i32> %24, i32 822177708, i32 3
%26 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %25, i32 32, i32 0) #2
%27 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %25, i32 36, i32 0) #2
%28 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %25, i32 40, i32 0) #2
%29 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %25, i32 44, i32 0) #2
%30 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %25, i32 48, i32 0) #2
%31 = call nsz arcp float @llvm.amdgcn.s.buffer.load.f32(<4 x i32> %25, i32 52, i32 0) #2
%32 = insertelement <6 x float> undef, float %26, i32 0
%33 = insertelement <6 x float> %32, float %27, i32 1
%34 = insertelement <6 x float> %33, float %28, i32 2
%35 = insertelement <6 x float> %34, float %29, i32 3
%36 = insertelement <6 x float> %35, float %30, i32 4
%37 = insertelement <6 x float> %36, float %31, i32 5
%38 = bitcast <6 x float> %37 to <3 x i64>
%39 = and i32 %5, 1023
%40 = lshr i32 %5, 10
%41 = and i32 %40, 1023
%42 = lshr i32 %5, 20
%43 = and i32 %42, 1023
%44 = insertelement <3 x i32> undef, i32 %39, i32 0
%45 = insertelement <3 x i32> %44, i32 %41, i32 1
%46 = insertelement <3 x i32> %45, i32 %43, i32 2
%47 = zext i32 %6 to i64
%48 = zext i32 %7 to i64
%49 = zext i32 %8 to i64
%50 = insertelement <3 x i64> undef, i64 %47, i32 0
%51 = insertelement <3 x i64> %50, i64 %48, i32 1
%52 = insertelement <3 x i64> %51, i64 %49, i32 2
%53 = extractelement <3 x i32> %9, i32 0
%54 = zext i32 %53 to i64
%55 = extractelement <3 x i32> %9, i32 1
%56 = zext i32 %55 to i64
%57 = extractelement <3 x i32> %9, i32 2
%58 = zext i32 %57 to i64
%59 = extractelement <3 x i32> %46, i32 0
%60 = zext i32 %59 to i64
%61 = extractelement <3 x i32> %46, i32 1
%62 = zext i32 %61 to i64
%63 = extractelement <3 x i32> %46, i32 2
%64 = zext i32 %63 to i64
%65 = extractelement <3 x i64> %52, i32 0
%66 = mul i64 %65, %60
%67 = extractelement <3 x i64> %52, i32 1
%68 = mul i64 %67, %62
%69 = extractelement <3 x i64> %52, i32 2
%70 = mul i64 %69, %64
%71 = add i64 %66, %54
%72 = add i64 %68, %56
%73 = add i64 %70, %58
%74 = extractelement <3 x i64> %38, i32 0
%75 = add i64 %71, %74
%76 = extractelement <3 x i64> %38, i32 1
%77 = add i64 %72, %76
%78 = trunc i64 %75 to i32
%79 = trunc i64 %77 to i32
%80 = sext i32 %79 to i64
%81 = zext <3 x i32> %4 to <3 x i64>
%82 = extractelement <3 x i64> %81, i32 0
%83 = mul i64 %60, %82
%84 = extractelement <3 x i64> %81, i32 1
%85 = mul i64 %62, %84
%86 = mul i64 %80, %83
%87 = sext i32 %78 to i64
%88 = add i64 %86, %87
%89 = trunc i64 %88 to i32
%90 = mul i64 %73, %85
%91 = add i64 %72, %90
%92 = mul i64 %83, %91
%93 = add i64 %71, %92
%94 = trunc i64 %93 to i32
%95 = icmp eq i32 %89, %94
%96 = select i1 %95, i32 1, i32 0
%97 = sext i32 %89 to i64
%98 = shl i64 %97, 2
%99 = add i64 %20, %98
%100 = inttoptr i64 %99 to i32 addrspace(1)*
store i32 %96, i32 addrspace(1)* %100, align 4
ret void
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment