brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · e85466e Raw
108 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -S -mtriple=amdgcn-- -passes=amdgpu-simplifylib < %s | FileCheck %s3 4; sin and cos are already defined in the module but sincos isn't.5 6define float @_Z3sinf(float noundef %x) {7; CHECK-LABEL: define float @_Z3sinf8; CHECK-SAME: (float noundef [[X:%.*]]) {9; CHECK-NEXT:    [[RESULT:%.*]] = call float asm "10; CHECK-NEXT:    ret float [[RESULT]]11;12  %result = call float asm "; $0 = sin($1)","=v,v"(float %x)13  ret float %result14}15 16define float @_Z3cosf(float noundef %x) {17; CHECK-LABEL: define float @_Z3cosf18; CHECK-SAME: (float noundef [[X:%.*]]) {19; CHECK-NEXT:    [[RESULT:%.*]] = call float asm "20; CHECK-NEXT:    ret float [[RESULT]]21;22  %result = call float asm "; $0 = cos($1)","=v,v"(float %x)23  ret float %result24}25 26define <2 x float> @_Z3sinDv2_f(<2 x float> noundef %x) {27; CHECK-LABEL: define <2 x float> @_Z3sinDv2_f28; CHECK-SAME: (<2 x float> noundef [[X:%.*]]) {29; CHECK-NEXT:    [[RESULT:%.*]] = call <2 x float> asm "30; CHECK-NEXT:    ret <2 x float> [[RESULT]]31;32  %result = call <2 x float> asm "; $0 = sin($1)","=v,v"(<2 x float> %x)33  ret <2 x float> %result34}35 36define <2 x float> @_Z3cosDv2_f(<2 x float> noundef %x) {37; CHECK-LABEL: define <2 x float> @_Z3cosDv2_f38; CHECK-SAME: (<2 x float> noundef [[X:%.*]]) {39; CHECK-NEXT:    [[RESULT:%.*]] = call <2 x float> asm "40; CHECK-NEXT:    ret <2 x float> [[RESULT]]41;42  %result = call <2 x float> asm "; $0 = cos($1)","=v,v"(<2 x float> %x)43  ret <2 x float> %result44}45 46define void @sincos_f32(float noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {47; CHECK-LABEL: define void @sincos_f3248; CHECK-SAME: (float noundef [[X:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) {49; CHECK-NEXT:  entry:50; CHECK-NEXT:    [[CALL:%.*]] = tail call contract float @_Z3sinf(float noundef [[X]])51; CHECK-NEXT:    store float [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 452; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float noundef [[X]])53; CHECK-NEXT:    store float [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 454; CHECK-NEXT:    ret void55;56entry:57  %call = tail call contract float @_Z3sinf(float noundef %x)58  store float %call, ptr addrspace(1) %sin_out, align 459  %call1 = tail call contract float @_Z3cosf(float noundef %x)60  store float %call1, ptr addrspace(1) %cos_out, align 461  ret void62}63 64define void @sincos_f32_value_is_same_constantfp(ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {65; CHECK-LABEL: define void @sincos_f32_value_is_same_constantfp66; CHECK-SAME: (ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) {67; CHECK-NEXT:  entry:68; CHECK-NEXT:    [[CALL:%.*]] = tail call contract float @_Z3sinf(float 4.200000e+01)69; CHECK-NEXT:    store float [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 470; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float 4.200000e+01)71; CHECK-NEXT:    store float [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 472; CHECK-NEXT:    ret void73;74entry:75  %call = tail call contract float @_Z3sinf(float 42.0)76  store float %call, ptr addrspace(1) %sin_out, align 477  %call1 = tail call contract float @_Z3cosf(float 42.0)78  store float %call1, ptr addrspace(1) %cos_out, align 479  ret void80}81 82define void @sincos_v2f32(<2 x float> noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {83; GCN-LABEL: define void @sincos_v2f3284; GCN-SAME: (<2 x float> noundef [[X:%.*]], ptr addrspace(1) nocapture noundef writeonly [[SIN_OUT:%.*]], ptr addrspace(1) nocapture noundef writeonly [[COS_OUT:%.*]]) local_unnamed_addr {85; GCN-NEXT:  entry:86; GCN-NEXT:    [[CALL:%.*]] = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef [[X]])87; GCN-NEXT:    store <2 x float> [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 888; GCN-NEXT:    [[CALL1:%.*]] = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef [[X]])89; GCN-NEXT:    store <2 x float> [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 890; GCN-NEXT:    ret void91;92; CHECK-LABEL: define void @sincos_v2f3293; CHECK-SAME: (<2 x float> noundef [[X:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) {94; CHECK-NEXT:  entry:95; CHECK-NEXT:    [[CALL:%.*]] = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef [[X]])96; CHECK-NEXT:    store <2 x float> [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 897; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef [[X]])98; CHECK-NEXT:    store <2 x float> [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 899; CHECK-NEXT:    ret void100;101entry:102  %call = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef %x)103  store <2 x float> %call, ptr addrspace(1) %sin_out, align 8104  %call1 = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef %x)105  store <2 x float> %call1, ptr addrspace(1) %cos_out, align 8106  ret void107}108