brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.0 KiB · 49f397e Raw
170 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals --version 22; RUN: opt -S -mtriple=amdgcn-- -passes=amdgpu-simplifylib -amdgpu-prelink < %s | FileCheck %s3 4declare float @_Z3sinf(float noundef)5declare float @_Z3cosf(float noundef)6declare <2 x float> @_Z3sinDv2_f(<2 x float> noundef)7declare <2 x float> @_Z3cosDv2_f(<2 x float> noundef)8 9define void @sincos_f32_nobuiltin(float noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) #0 {10; CHECK: Function Attrs: nobuiltin11; CHECK-LABEL: define void @sincos_f32_nobuiltin12; CHECK-SAME: (float noundef [[X:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) #[[ATTR0:[0-9]+]] {13; CHECK-NEXT:  entry:14; CHECK-NEXT:    [[__SINCOS_:%.*]] = alloca float, align 4, addrspace(5)15; CHECK-NEXT:    [[TMP0:%.*]] = call contract float @_Z6sincosfPU3AS5f(float [[X]], ptr addrspace(5) [[__SINCOS_]])16; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr addrspace(5) [[__SINCOS_]], align 417; CHECK-NEXT:    store float [[TMP0]], ptr addrspace(1) [[SIN_OUT]], align 418; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float noundef [[X]])19; CHECK-NEXT:    store float [[TMP1]], ptr addrspace(1) [[COS_OUT]], align 420; CHECK-NEXT:    ret void21;22entry:23  %call = tail call contract float @_Z3sinf(float noundef %x)24  store float %call, ptr addrspace(1) %sin_out, align 425  %call1 = tail call contract float @_Z3cosf(float noundef %x)26  store float %call1, ptr addrspace(1) %cos_out, align 427  ret void28}29 30define void @sincos_v2f32_nobuiltin(<2 x float> noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) #0 {31; CHECK: Function Attrs: nobuiltin32; CHECK-LABEL: define void @sincos_v2f32_nobuiltin33; 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:%.*]]) #[[ATTR0]] {34; CHECK-NEXT:  entry:35; CHECK-NEXT:    [[__SINCOS_:%.*]] = alloca <2 x float>, align 8, addrspace(5)36; CHECK-NEXT:    [[TMP0:%.*]] = call contract <2 x float> @_Z6sincosDv2_fPU3AS5S_(<2 x float> [[X]], ptr addrspace(5) [[__SINCOS_]])37; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x float>, ptr addrspace(5) [[__SINCOS_]], align 838; CHECK-NEXT:    store <2 x float> [[TMP0]], ptr addrspace(1) [[SIN_OUT]], align 839; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef [[X]])40; CHECK-NEXT:    store <2 x float> [[TMP1]], ptr addrspace(1) [[COS_OUT]], align 841; CHECK-NEXT:    ret void42;43entry:44  %call = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef %x)45  store <2 x float> %call, ptr addrspace(1) %sin_out, align 846  %call1 = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef %x)47  store <2 x float> %call1, ptr addrspace(1) %cos_out, align 848  ret void49}50 51define void @sincos_f32_no_builtins(float noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) #1 {52; CHECK-LABEL: define void @sincos_f32_no_builtins53; CHECK-SAME: (float noundef [[X:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) #[[ATTR1:[0-9]+]] {54; CHECK-NEXT:  entry:55; CHECK-NEXT:    [[__SINCOS_:%.*]] = alloca float, align 4, addrspace(5)56; CHECK-NEXT:    [[TMP0:%.*]] = call contract float @_Z6sincosfPU3AS5f(float [[X]], ptr addrspace(5) [[__SINCOS_]])57; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr addrspace(5) [[__SINCOS_]], align 458; CHECK-NEXT:    store float [[TMP0]], ptr addrspace(1) [[SIN_OUT]], align 459; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float noundef [[X]])60; CHECK-NEXT:    store float [[TMP1]], ptr addrspace(1) [[COS_OUT]], align 461; CHECK-NEXT:    ret void62;63entry:64  %call = tail call contract float @_Z3sinf(float noundef %x)65  store float %call, ptr addrspace(1) %sin_out, align 466  %call1 = tail call contract float @_Z3cosf(float noundef %x)67  store float %call1, ptr addrspace(1) %cos_out, align 468  ret void69}70 71define void @sincos_v2f32_no_builtins(<2 x float> noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) #1 {72; CHECK-LABEL: define void @sincos_v2f32_no_builtins73; 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:%.*]]) #[[ATTR1]] {74; CHECK-NEXT:  entry:75; CHECK-NEXT:    [[__SINCOS_:%.*]] = alloca <2 x float>, align 8, addrspace(5)76; CHECK-NEXT:    [[TMP0:%.*]] = call contract <2 x float> @_Z6sincosDv2_fPU3AS5S_(<2 x float> [[X]], ptr addrspace(5) [[__SINCOS_]])77; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x float>, ptr addrspace(5) [[__SINCOS_]], align 878; CHECK-NEXT:    store <2 x float> [[TMP0]], ptr addrspace(1) [[SIN_OUT]], align 879; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef [[X]])80; CHECK-NEXT:    store <2 x float> [[TMP1]], ptr addrspace(1) [[COS_OUT]], align 881; CHECK-NEXT:    ret void82;83entry:84  %call = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef %x)85  store <2 x float> %call, ptr addrspace(1) %sin_out, align 886  %call1 = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef %x)87  store <2 x float> %call1, ptr addrspace(1) %cos_out, align 888  ret void89}90 91define void @sincos_f32_nobuiltin_callsite(float noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {92; CHECK-LABEL: define void @sincos_f32_nobuiltin_callsite93; CHECK-SAME: (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 float @_Z3sinf(float noundef [[X]]) #[[ATTR0]]96; CHECK-NEXT:    store float [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 497; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float noundef [[X]]) #[[ATTR0]]98; CHECK-NEXT:    store float [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 499; CHECK-NEXT:    ret void100;101entry:102  %call = tail call contract float @_Z3sinf(float noundef %x) #0103  store float %call, ptr addrspace(1) %sin_out, align 4104  %call1 = tail call contract float @_Z3cosf(float noundef %x) #0105  store float %call1, ptr addrspace(1) %cos_out, align 4106  ret void107}108 109define void @sincos_f32_nobuiltin_callsite0(float noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {110; CHECK-LABEL: define void @sincos_f32_nobuiltin_callsite0111; CHECK-SAME: (float noundef [[X:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) {112; CHECK-NEXT:  entry:113; CHECK-NEXT:    [[CALL:%.*]] = tail call contract float @_Z3sinf(float noundef [[X]]) #[[ATTR0]]114; CHECK-NEXT:    store float [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 4115; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float noundef [[X]])116; CHECK-NEXT:    store float [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 4117; CHECK-NEXT:    ret void118;119entry:120  %call = tail call contract float @_Z3sinf(float noundef %x) #0121  store float %call, ptr addrspace(1) %sin_out, align 4122  %call1 = tail call contract float @_Z3cosf(float noundef %x)123  store float %call1, ptr addrspace(1) %cos_out, align 4124  ret void125}126 127define void @sincos_f32_nobuiltin_callsite1(float noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {128; CHECK-LABEL: define void @sincos_f32_nobuiltin_callsite1129; CHECK-SAME: (float noundef [[X:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[SIN_OUT:%.*]], ptr addrspace(1) noundef writeonly captures(none) [[COS_OUT:%.*]]) {130; CHECK-NEXT:  entry:131; CHECK-NEXT:    [[CALL:%.*]] = tail call contract float @_Z3sinf(float noundef [[X]])132; CHECK-NEXT:    store float [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 4133; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract float @_Z3cosf(float noundef [[X]]) #[[ATTR0]]134; CHECK-NEXT:    store float [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 4135; CHECK-NEXT:    ret void136;137entry:138  %call = tail call contract float @_Z3sinf(float noundef %x)139  store float %call, ptr addrspace(1) %sin_out, align 4140  %call1 = tail call contract float @_Z3cosf(float noundef %x) #0141  store float %call1, ptr addrspace(1) %cos_out, align 4142  ret void143}144 145define void @sincos_v2f32_nobuiltin_callsite(<2 x float> noundef %x, ptr addrspace(1) nocapture noundef writeonly %sin_out, ptr addrspace(1) nocapture noundef writeonly %cos_out) {146; CHECK-LABEL: define void @sincos_v2f32_nobuiltin_callsite147; 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:%.*]]) {148; CHECK-NEXT:  entry:149; CHECK-NEXT:    [[CALL:%.*]] = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef [[X]]) #[[ATTR0]]150; CHECK-NEXT:    store <2 x float> [[CALL]], ptr addrspace(1) [[SIN_OUT]], align 8151; CHECK-NEXT:    [[CALL1:%.*]] = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef [[X]]) #[[ATTR0]]152; CHECK-NEXT:    store <2 x float> [[CALL1]], ptr addrspace(1) [[COS_OUT]], align 8153; CHECK-NEXT:    ret void154;155entry:156  %call = tail call contract <2 x float> @_Z3sinDv2_f(<2 x float> noundef %x) #0157  store <2 x float> %call, ptr addrspace(1) %sin_out, align 8158  %call1 = tail call contract <2 x float> @_Z3cosDv2_f(<2 x float> noundef %x) #0159  store <2 x float> %call1, ptr addrspace(1) %cos_out, align 8160  ret void161}162 163; TODO: Handle single function forms164attributes #0 = { nobuiltin }165attributes #1 = { "no-builtins" }166;.167; CHECK: attributes #[[ATTR0]] = { nobuiltin }168; CHECK: attributes #[[ATTR1]] = { "no-builtins" }169;.170