brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · ebc0382 Raw
56 lines · plain
1; RUN: opt -S  -dxil-intrinsic-expansion -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=CHECK,EXPCHECK2; RUN: opt -S  -dxil-intrinsic-expansion -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=CHECK,DOPCHECK3 4; Make sure dxil operation function calls for pow are generated.5 6define noundef float @pow_float(float noundef %a, float noundef %b) {7entry:8; DOPCHECK: call float @dx.op.unary.f32(i32 23, float %a)9; EXPCHECK: call float @llvm.log2.f32(float %a)10; CHECK: fmul float %{{.*}}, %b11; DOPCHECK: call float @dx.op.unary.f32(i32 21, float %{{.*}})12; EXPCHECK: call float @llvm.exp2.f32(float %{{.*}})13  %elt.pow = call float @llvm.pow.f32(float %a, float %b)14  ret float %elt.pow15}16 17define noundef half @pow_half(half noundef %a, half noundef %b) {18entry:19; DOPCHECK: call half @dx.op.unary.f16(i32 23, half %a)20; EXPCHECK: call half @llvm.log2.f16(half %a)21; CHECK: fmul half %{{.*}}, %b22; DOPCHECK: call half @dx.op.unary.f16(i32 21, half %{{.*}})23; EXPCHECK: call half @llvm.exp2.f16(half %{{.*}})24  %elt.pow = call half @llvm.pow.f16(half %a, half %b)25  ret half %elt.pow26}27 28define noundef float @powi_float(float noundef %a, i32 noundef %b) {29entry:30; CHECK: [[CAST:%.*]] = sitofp i32 %b to float31; DOPCHECK: call float @dx.op.unary.f32(i32 23, float %a)32; EXPCHECK: call float @llvm.log2.f32(float %a)33; CHECK: fmul float %{{.*}}, [[CAST]]34; DOPCHECK: call float @dx.op.unary.f32(i32 21, float %{{.*}})35; EXPCHECK: call float @llvm.exp2.f32(float %{{.*}})36  %elt.powi = call float @llvm.powi.f32.i32(float %a, i32 %b)37  ret float %elt.powi38}39 40define noundef half @powi_half(half noundef %a, i32 noundef %b) {41entry:42; CHECK: [[CAST:%.*]] = sitofp i32 %b to half43; DOPCHECK: call half @dx.op.unary.f16(i32 23, half %a)44; EXPCHECK: call half @llvm.log2.f16(half %a)45; CHECK: fmul half %{{.*}}, [[CAST]]46; DOPCHECK: call half @dx.op.unary.f16(i32 21, half %{{.*}})47; EXPCHECK: call half @llvm.exp2.f16(half %{{.*}})48  %elt.powi = call half @llvm.powi.f16.i32(half %a, i32 %b)49  ret half %elt.powi50}51 52declare half @llvm.pow.f16(half,half)53declare float @llvm.pow.f32(float,float)54declare half @llvm.powi.f16.i32(half,i32)55declare float @llvm.powi.f32.i32(float,i32)56