brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · c53f4b6 Raw
115 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -mtriple=amdgcn-amd-amdhsa -passes=load-store-vectorizer -S -o - %s | FileCheck %s3 4define void @merge_i32_v2i16_f32_v4i8(ptr addrspace(1) %ptr1, ptr addrspace(2) %ptr2) {5; CHECK-LABEL: define void @merge_i32_v2i16_f32_v4i8(6; CHECK-SAME: ptr addrspace(1) [[PTR1:%.*]], ptr addrspace(2) [[PTR2:%.*]]) {7; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, ptr addrspace(1) [[PTR1]], i64 08; CHECK-NEXT:    [[LOAD1:%.*]] = load i32, ptr addrspace(1) [[GEP1]], align 49; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds <2 x i16>, ptr addrspace(1) [[PTR1]], i64 110; CHECK-NEXT:    [[LOAD2:%.*]] = load <2 x i16>, ptr addrspace(1) [[GEP2]], align 411; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds float, ptr addrspace(1) [[PTR1]], i64 212; CHECK-NEXT:    [[LOAD3:%.*]] = load float, ptr addrspace(1) [[GEP3]], align 413; CHECK-NEXT:    [[GEP4:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(1) [[PTR1]], i64 314; CHECK-NEXT:    [[LOAD4:%.*]] = load <4 x i8>, ptr addrspace(1) [[GEP4]], align 415; CHECK-NEXT:    [[STORE_GEP1:%.*]] = getelementptr inbounds i32, ptr addrspace(2) [[PTR2]], i64 016; CHECK-NEXT:    store i32 [[LOAD1]], ptr addrspace(2) [[STORE_GEP1]], align 417; CHECK-NEXT:    [[STORE_GEP2:%.*]] = getelementptr inbounds <2 x i16>, ptr addrspace(2) [[PTR2]], i64 118; CHECK-NEXT:    store <2 x i16> [[LOAD2]], ptr addrspace(2) [[STORE_GEP2]], align 419; CHECK-NEXT:    [[STORE_GEP3:%.*]] = getelementptr inbounds float, ptr addrspace(2) [[PTR2]], i64 220; CHECK-NEXT:    store float [[LOAD3]], ptr addrspace(2) [[STORE_GEP3]], align 421; CHECK-NEXT:    [[STORE_GEP4:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(2) [[PTR2]], i64 322; CHECK-NEXT:    store <4 x i8> [[LOAD4]], ptr addrspace(2) [[STORE_GEP4]], align 423; CHECK-NEXT:    ret void24;25  %gep1 = getelementptr inbounds i32, ptr addrspace(1) %ptr1, i64 026  %load1 = load i32, ptr addrspace(1) %gep1, align 427  %gep2 = getelementptr inbounds <2 x i16>, ptr addrspace(1) %ptr1, i64 128  %load2 = load <2 x i16>, ptr addrspace(1) %gep2, align 429  %gep3 = getelementptr inbounds float, ptr addrspace(1) %ptr1, i64 230  %load3 = load float, ptr addrspace(1) %gep3, align 431  %gep4 = getelementptr inbounds <4 x i8>, ptr addrspace(1) %ptr1, i64 332  %load4 = load <4 x i8>, ptr addrspace(1) %gep4, align 433  %store.gep1 = getelementptr inbounds i32, ptr addrspace(2) %ptr2, i64 034  store i32 %load1, ptr addrspace(2) %store.gep1, align 435  %store.gep2 = getelementptr inbounds <2 x i16>, ptr addrspace(2) %ptr2, i64 136  store <2 x i16> %load2, ptr addrspace(2) %store.gep2, align 437  %store.gep3 = getelementptr inbounds float, ptr addrspace(2) %ptr2, i64 238  store float %load3, ptr addrspace(2) %store.gep3, align 439  %store.gep4 = getelementptr inbounds <4 x i8>, ptr addrspace(2) %ptr2, i64 340  store <4 x i8> %load4, ptr addrspace(2) %store.gep4, align 441  ret void42}43 44define void @merge_f32_v2f16_type(ptr addrspace(1) %ptr1, ptr addrspace(2) %ptr2) {45; CHECK-LABEL: define void @merge_f32_v2f16_type(46; CHECK-SAME: ptr addrspace(1) [[PTR1:%.*]], ptr addrspace(2) [[PTR2:%.*]]) {47; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds float, ptr addrspace(1) [[PTR1]], i64 048; CHECK-NEXT:    [[LOAD1:%.*]] = load float, ptr addrspace(1) [[GEP1]], align 449; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds <2 x half>, ptr addrspace(1) [[PTR1]], i64 150; CHECK-NEXT:    [[LOAD2:%.*]] = load <2 x half>, ptr addrspace(1) [[GEP2]], align 451; CHECK-NEXT:    [[STORE_GEP1:%.*]] = getelementptr inbounds i32, ptr addrspace(2) [[PTR2]], i64 052; CHECK-NEXT:    store float [[LOAD1]], ptr addrspace(2) [[STORE_GEP1]], align 453; CHECK-NEXT:    [[STORE_GEP2:%.*]] = getelementptr inbounds <2 x half>, ptr addrspace(2) [[PTR2]], i64 154; CHECK-NEXT:    store <2 x half> [[LOAD2]], ptr addrspace(2) [[STORE_GEP2]], align 455; CHECK-NEXT:    ret void56;57  %gep1 = getelementptr inbounds float, ptr addrspace(1) %ptr1, i64 058  %load1 = load float, ptr addrspace(1) %gep1, align 459  %gep2 = getelementptr inbounds <2 x half>, ptr addrspace(1) %ptr1, i64 160  %load2 = load <2 x half>, ptr addrspace(1) %gep2, align 461  %store.gep1 = getelementptr inbounds i32, ptr addrspace(2) %ptr2, i64 062  store float %load1, ptr addrspace(2) %store.gep1, align 463  %store.gep2 = getelementptr inbounds <2 x half>, ptr addrspace(2) %ptr2, i64 164  store <2 x half> %load2, ptr addrspace(2) %store.gep2, align 465  ret void66}67 68define void @merge_v2f16_bfloat_type(ptr addrspace(1) %ptr1, ptr addrspace(2) %ptr2) {69; CHECK-LABEL: define void @merge_v2f16_bfloat_type(70; CHECK-SAME: ptr addrspace(1) [[PTR1:%.*]], ptr addrspace(2) [[PTR2:%.*]]) {71; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds bfloat, ptr addrspace(1) [[PTR1]], i64 072; CHECK-NEXT:    [[LOAD1:%.*]] = load bfloat, ptr addrspace(1) [[GEP1]], align 473; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds <2 x half>, ptr addrspace(1) [[PTR1]], i64 174; CHECK-NEXT:    [[LOAD2:%.*]] = load <2 x half>, ptr addrspace(1) [[GEP2]], align 475; CHECK-NEXT:    [[STORE_GEP1:%.*]] = getelementptr inbounds i32, ptr addrspace(2) [[PTR2]], i64 076; CHECK-NEXT:    store bfloat [[LOAD1]], ptr addrspace(2) [[STORE_GEP1]], align 477; CHECK-NEXT:    [[STORE_GEP2:%.*]] = getelementptr inbounds <2 x half>, ptr addrspace(2) [[PTR2]], i64 178; CHECK-NEXT:    store <2 x half> [[LOAD2]], ptr addrspace(2) [[STORE_GEP2]], align 479; CHECK-NEXT:    ret void80;81  %gep1 = getelementptr inbounds bfloat, ptr addrspace(1) %ptr1, i64 082  %load1 = load bfloat, ptr addrspace(1) %gep1, align 483  %gep2 = getelementptr inbounds <2 x half>, ptr addrspace(1) %ptr1, i64 184  %load2 = load <2 x half>, ptr addrspace(1) %gep2, align 485  %store.gep1 = getelementptr inbounds i32, ptr addrspace(2) %ptr2, i64 086  store bfloat %load1, ptr addrspace(2) %store.gep1, align 487  %store.gep2 = getelementptr inbounds <2 x half>, ptr addrspace(2) %ptr2, i64 188  store <2 x half> %load2, ptr addrspace(2) %store.gep2, align 489  ret void90}91 92define void @no_merge_mixed_ptr_addrspaces(ptr addrspace(1) %ptr1, ptr addrspace(2) %ptr2) {93; CHECK-LABEL: define void @no_merge_mixed_ptr_addrspaces(94; CHECK-SAME: ptr addrspace(1) [[PTR1:%.*]], ptr addrspace(2) [[PTR2:%.*]]) {95; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds ptr addrspace(1), ptr addrspace(1) [[PTR1]], i64 096; CHECK-NEXT:    [[LOAD1:%.*]] = load ptr addrspace(1), ptr addrspace(1) [[GEP1]], align 497; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds ptr addrspace(2), ptr addrspace(1) [[PTR1]], i64 198; CHECK-NEXT:    [[LOAD2:%.*]] = load ptr addrspace(2), ptr addrspace(1) [[GEP2]], align 499; CHECK-NEXT:    [[STORE_GEP1:%.*]] = getelementptr inbounds i32, ptr addrspace(2) [[PTR2]], i64 0100; CHECK-NEXT:    store ptr addrspace(1) [[LOAD1]], ptr addrspace(2) [[STORE_GEP1]], align 4101; CHECK-NEXT:    [[STORE_GEP2:%.*]] = getelementptr inbounds ptr addrspace(2), ptr addrspace(2) [[PTR2]], i64 1102; CHECK-NEXT:    store ptr addrspace(2) [[LOAD2]], ptr addrspace(2) [[STORE_GEP2]], align 4103; CHECK-NEXT:    ret void104;105  %gep1 = getelementptr inbounds ptr addrspace(1), ptr addrspace(1) %ptr1, i64 0106  %load1 = load ptr addrspace(1), ptr addrspace(1) %gep1, align 4107  %gep2 = getelementptr inbounds ptr addrspace(2), ptr addrspace(1) %ptr1, i64 1108  %load2 = load ptr addrspace(2), ptr addrspace(1) %gep2, align 4109  %store.gep1 = getelementptr inbounds i32, ptr addrspace(2) %ptr2, i64 0110  store ptr addrspace(1) %load1, ptr addrspace(2) %store.gep1, align 4111  %store.gep2 = getelementptr inbounds ptr addrspace(2), ptr addrspace(2) %ptr2, i64 1112  store ptr addrspace(2) %load2, ptr addrspace(2) %store.gep2, align 4113  ret void114}115