/
redgpu
/
clspv
Обзор
Документация
Войти
/
redgpu
/
clspv
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
test/LongVectorLowering/function.ll
60 строк
2 KB
Marco Antognini
Lower function call and initial support for LLVM intrinsics (#666)
04 ноя 2020, 01:10
Не верифицирован
04 ноя 2020, 01:10
e8a6862
Код
Авторство
О чём код?
; RUN: clspv-opt --LongVectorLowering --early-cse --instcombine %s -o %t ; RUN: FileCheck %s < %t ; Test that function arguments and return types can be lowered; ; also cover function calls. ; Rely on CSE and InstCombine to simplify the generated IR. target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" target triple = "spir-unknown-unknown" ; @foo doesn't require any lowering define spir_func i32 @foo() { ret i32 42 } ; @id requires lowering for parameter and return types define spir_func <8 x float> @id(<8 x float> %x) { ret <8 x float> %x } ; @test1 requires lowering for parameter and return types, and call instruction. ; Ensures metadata is preserved. define spir_func <8 x float> @test1(<8 x float> %x) !info !0 { %y = call spir_func <8 x float> @id(<8 x float> %x), !info !0 ret <8 x float> %y } ; @test2 requires lowering for return type, but not for call instruction. define spir_func <8 x i32> @test2(i32 %a) { %b = call spir_func i32 @foo() %c = add i32 %a, %b %d = insertelement <8 x i32> undef, i32 %c, i32 0 %e = shufflevector <8 x i32> %d, <8 x i32> undef, <8 x i32> zeroinitializer ret <8 x i32> %e } !0 = !{!"some metadata"} ; CHECK-NOT: <8 x float> ; CHECK-NOT: <8 x i32> ; ; CHECK-LABEL: define spir_func ; CHECK-SAME: [[INT8:{ i32, i32, i32, i32, i32, i32, i32, i32 }]] ; CHECK-SAME: @test2(i32 {{%[^ ]+}}) ; CHECK-NEXT: call spir_func i32 @foo() ; CHECK: ret [[INT8]] {{%[^ ]+}} ; ; CHECK-LABEL: define spir_func ; CHECK-SAME: [[FLOAT8:{ float, float, float, float, float, float, float, float }]] ; CHECK-SAME: @test1([[FLOAT8]] [[X:%[^ ]+]]) ; CHECK-SAME: !info [[MD:![0-9]+]] ; CHECK-NEXT: [[Y:%[^ ]+]] = call spir_func [[FLOAT8]] @id([[FLOAT8]] [[X]]) ; CHECK-SAME: !info [[MD]] ; CHECK-NEXT: ret [[FLOAT8]] [[Y]] ; ; CHECK-LABEL: define spir_func ; CHECK-SAME: [[FLOAT8]] @id([[FLOAT8]] [[X:%[^ ]+]]) ; CHECK-NEXT: ret [[FLOAT8]] [[X]] ; ; CHECK: [[MD]] = !{!"some metadata"}