brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 3c661f8 Raw
151 lines · plain
1// RUN: mlir-translate -no-implicit-module -test-spirv-roundtrip %s | FileCheck %s2 3// RUN: %if spirv-tools %{ rm -rf %t %}4// RUN: %if spirv-tools %{ mkdir %t %}5// RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv --split-input-file --spirv-save-validation-files-with-prefix=%t/module %s %}6// RUN: %if spirv-tools %{ spirv-val %t %}7 8spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Linkage], []> {9  spirv.func @math(%arg0 : f32, %arg1 : f32, %arg2 : i32) "None" {10    // CHECK: {{%.*}} = spirv.GL.Exp {{%.*}} : f3211    %0 = spirv.GL.Exp %arg0 : f3212    // CHECK: {{%.*}} = spirv.GL.Sqrt {{%.*}} : f3213    %2 = spirv.GL.Sqrt %arg0 : f3214    // CHECK: {{%.*}} = spirv.GL.Cos {{%.*}} : f3215    %3 = spirv.GL.Cos %arg0 : f3216    // CHECK: {{%.*}} = spirv.GL.Sin {{%.*}} : f3217    %4 = spirv.GL.Sin %arg0 : f3218    // CHECK: {{%.*}} = spirv.GL.Tan {{%.*}} : f3219    %5 = spirv.GL.Tan %arg0 : f3220    // CHECK: {{%.*}} = spirv.GL.Acos {{%.*}} : f3221    %6 = spirv.GL.Acos %arg0 : f3222    // CHECK: {{%.*}} = spirv.GL.Asin {{%.*}} : f3223    %7 = spirv.GL.Asin %arg0 : f3224    // CHECK: {{%.*}} = spirv.GL.Atan {{%.*}} : f3225    %8 = spirv.GL.Atan %arg0 : f3226    // CHECK: {{%.*}} = spirv.GL.Sinh {{%.*}} : f3227    %9 = spirv.GL.Sinh %arg0 : f3228    // CHECK: {{%.*}} = spirv.GL.Cosh {{%.*}} : f3229    %10 = spirv.GL.Cosh %arg0 : f3230    // CHECK: {{%.*}} = spirv.GL.Pow {{%.*}} : f3231    %11 = spirv.GL.Pow %arg0, %arg1 : f3232    // CHECK: {{%.*}} = spirv.GL.Round {{%.*}} : f3233    %12 = spirv.GL.Round %arg0 : f3234    // CHECK: {{%.*}} = spirv.GL.FrexpStruct {{%.*}} : f32 -> !spirv.struct<(f32, i32)>35    %13 = spirv.GL.FrexpStruct %arg0 : f32 -> !spirv.struct<(f32, i32)>36    // CHECK: {{%.*}} = spirv.GL.Ldexp {{%.*}} : f32, {{%.*}} : i32 -> f3237    %14 = spirv.GL.Ldexp %arg0 : f32, %arg2 : i32 -> f3238    // CHECK: {{%.*}} = spirv.GL.FMix {{%.*}} : f32, {{%.*}} : f32, {{%.*}} : f32 -> f3239    %15 = spirv.GL.FMix %arg0 : f32, %arg1 : f32, %arg0 : f32 -> f3240    // CHECK: {{%.*}} = spirv.GL.Fract {{%.*}} : f3241    %16 = spirv.GL.Fract %arg0 : f3242    // CHECK: {{%.*}} = spirv.GL.Asinh {{%.*}} : f3243    %17 = spirv.GL.Asinh %arg0 : f3244    // CHECK: {{%.*}} = spirv.GL.Acosh {{%.*}} : f3245    %18 = spirv.GL.Acosh %arg0 : f3246    // CHECK: {{%.*}} = spirv.GL.Atanh {{%.*}} : f3247    %19 = spirv.GL.Atanh %arg0 : f3248    // CHECK: {{%.*}} = spirv.GL.Log2 {{%.*}} : f3249    %20 = spirv.GL.Log2 %arg0 : f3250    // CHECK: {{%.*}} = spirv.GL.Tanh {{%.*}} : f3251    %21 = spirv.GL.Tanh %arg0 : f3252    // CHECK: {{%.*}} = spirv.GL.Exp2 {{%.*}} : f3253    %22 = spirv.GL.Exp2 %arg0 : f3254    spirv.Return55  }56 57  spirv.func @maxmin(%arg0 : f32, %arg1 : f32, %arg2 : i32, %arg3 : i32) "None" {58    // CHECK: {{%.*}} = spirv.GL.FMax {{%.*}}, {{%.*}} : f3259    %1 = spirv.GL.FMax %arg0, %arg1 : f3260    // CHECK: {{%.*}} = spirv.GL.SMax {{%.*}}, {{%.*}} : i3261    %2 = spirv.GL.SMax %arg2, %arg3 : i3262    // CHECK: {{%.*}} = spirv.GL.UMax {{%.*}}, {{%.*}} : i3263    %3 = spirv.GL.UMax %arg2, %arg3 : i3264 65    // CHECK: {{%.*}} = spirv.GL.FMin {{%.*}}, {{%.*}} : f3266    %4 = spirv.GL.FMin %arg0, %arg1 : f3267    // CHECK: {{%.*}} = spirv.GL.SMin {{%.*}}, {{%.*}} : i3268    %5 = spirv.GL.SMin %arg2, %arg3 : i3269    // CHECK: {{%.*}} = spirv.GL.UMin {{%.*}}, {{%.*}} : i3270    %6 = spirv.GL.UMin %arg2, %arg3 : i3271    spirv.Return72  }73 74  spirv.func @fclamp(%arg0 : f32, %arg1 : f32, %arg2 : f32) "None" {75    // CHECK: spirv.GL.FClamp {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : f3276    %13 = spirv.GL.FClamp %arg0, %arg1, %arg2 : f3277    spirv.Return78  }79 80  spirv.func @uclamp(%arg0 : ui32, %arg1 : ui32, %arg2 : ui32) "None" {81    // CHECK: spirv.GL.UClamp {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : i3282    %13 = spirv.GL.UClamp %arg0, %arg1, %arg2 : ui3283    spirv.Return84  }85 86  spirv.func @sclamp(%arg0 : si32, %arg1 : si32, %arg2 : si32) "None" {87    // CHECK: spirv.GL.SClamp {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : si3288    %13 = spirv.GL.SClamp %arg0, %arg1, %arg2 : si3289    spirv.Return90  }91 92  spirv.func @fma(%arg0 : f32, %arg1 : f32, %arg2 : f32) "None" {93    // CHECK: spirv.GL.Fma {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : f3294    %13 = spirv.GL.Fma %arg0, %arg1, %arg2 : f3295    spirv.Return96  }97 98  spirv.func @findilsb(%arg0 : i32) "None" {99    // CHECK: spirv.GL.FindILsb {{%.*}} : i32100    %2 = spirv.GL.FindILsb %arg0 : i32101    spirv.Return102  }103  spirv.func @findsmsb(%arg0 : i32) "None" {104    // CHECK: spirv.GL.FindSMsb {{%.*}} : i32105    %2 = spirv.GL.FindSMsb %arg0 : i32106    spirv.Return107  }108 109  spirv.func @findumsb(%arg0 : i32) "None" {110    // CHECK: spirv.GL.FindUMsb {{%.*}} : i32111    %2 = spirv.GL.FindUMsb %arg0 : i32112    spirv.Return113  }114 115  spirv.func @vector(%arg0 : f32, %arg1 : vector<3xf32>, %arg2 : vector<3xf32>, %arg3: vector<3xi32>) "None" {116    // CHECK: {{%.*}} = spirv.GL.Cross {{%.*}}, {{%.*}} : vector<3xf32>117    %0 = spirv.GL.Cross %arg1, %arg2 : vector<3xf32>118    // CHECK: {{%.*}} = spirv.GL.Normalize {{%.*}} : f32119    %1 = spirv.GL.Normalize %arg0 : f32120    // CHECK: {{%.*}} = spirv.GL.Normalize {{%.*}} : vector<3xf32>121    %2 = spirv.GL.Normalize %arg1 : vector<3xf32>122    // CHECK: {{%.*}} = spirv.GL.Reflect {{%.*}}, {{%.*}} : f32123    %3 = spirv.GL.Reflect %arg0, %arg0 : f32124    // CHECK: {{%.*}} = spirv.GL.Reflect {{%.*}}, {{%.*}} : vector<3xf32>125    %4 = spirv.GL.Reflect %arg1, %arg2 : vector<3xf32>126    // CHECK: {{%.*}} = spirv.GL.Distance {{%.*}}, {{%.*}} : f32, f32 -> f32127    %5 = spirv.GL.Distance %arg0, %arg0 : f32, f32 -> f32128    // CHECK: {{%.*}} = spirv.GL.Distance {{%.*}}, {{%.*}} : vector<3xf32>, vector<3xf32> -> f32129    %6 = spirv.GL.Distance %arg1, %arg2 : vector<3xf32>, vector<3xf32> -> f32130    // CHECK: {{%.*}} = spirv.GL.FindILsb {{%.*}} : vector<3xi32>131    %7 = spirv.GL.FindILsb %arg3 : vector<3xi32>132    // CHECK: {{%.*}} = spirv.GL.FindSMsb {{%.*}} : vector<3xi32>133    %8 = spirv.GL.FindSMsb %arg3 : vector<3xi32>134    // CHECK: {{%.*}} = spirv.GL.FindUMsb {{%.*}} : vector<3xi32>135    %9 = spirv.GL.FindUMsb %arg3 : vector<3xi32>136    // CHECK: {{%.*}} = spirv.GL.Length {{%.*}} : f32 -> f32137    %10 = spirv.GL.Length %arg0 : f32 -> f32138    // CHECK: {{%.*}} = spirv.GL.Length {{%.*}} : vector<3xf32> -> f32139    %11 = spirv.GL.Length %arg1 : vector<3xf32> -> f32140    spirv.Return141  }142 143  spirv.func @pack_half_2x16(%arg0 : i32) "None" {144    // CHECK: {{%.*}} = spirv.GL.UnpackHalf2x16 {{%.*}} : i32 -> vector<2xf32>145    %0 = spirv.GL.UnpackHalf2x16 %arg0 : i32 -> vector<2xf32>146    // CHECK: {{%.*}} = spirv.GL.PackHalf2x16 {{%.*}} : vector<2xf32> -> i32147    %1 = spirv.GL.PackHalf2x16 %0 : vector<2xf32> -> i32148    spirv.Return149  }150}151