brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 807ef65 Raw
138 lines · plain
1; RUN: opt -S -mtriple=amdgcn--amdhsa -passes=load-store-vectorizer < %s | FileCheck %s2; RUN: opt -S -mtriple=amdgcn--amdhsa -passes='function(load-store-vectorizer)' < %s | FileCheck %s3 4; Check that vectorizer can find a GEP through bitcast5; CHECK-LABEL: @vect_zext_bitcast_f32_to_i32_idx6; CHECK: load <4 x i32>7define void @vect_zext_bitcast_f32_to_i32_idx(ptr addrspace(1) %arg1, i32 %base) {8  %add1 = add nuw i32 %base, 09  %zext1 = zext i32 %add1 to i6410  %gep1 = getelementptr inbounds float, ptr addrspace(1) %arg1, i64 %zext111  %load1 = load i32, ptr addrspace(1) %gep1, align 412  %add2 = add nuw i32 %base, 113  %zext2 = zext i32 %add2 to i6414  %gep2 = getelementptr inbounds float, ptr addrspace(1) %arg1, i64 %zext215  %load2 = load i32, ptr addrspace(1) %gep2, align 416  %add3 = add nuw i32 %base, 217  %zext3 = zext i32 %add3 to i6418  %gep3 = getelementptr inbounds float, ptr addrspace(1) %arg1, i64 %zext319  %load3 = load i32, ptr addrspace(1) %gep3, align 420  %add4 = add nuw i32 %base, 321  %zext4 = zext i32 %add4 to i6422  %gep4 = getelementptr inbounds float, ptr addrspace(1) %arg1, i64 %zext423  %load4 = load i32, ptr addrspace(1) %gep4, align 424  ret void25}26 27; CHECK-LABEL: @vect_zext_bitcast_i8_st1_to_i32_idx28; CHECK: load i3229; CHECK: load i3230; CHECK: load i3231; CHECK: load i3232define void @vect_zext_bitcast_i8_st1_to_i32_idx(ptr addrspace(1) %arg1, i32 %base) {33  %add1 = add nuw i32 %base, 034  %zext1 = zext i32 %add1 to i6435  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 %zext136  %load1 = load i32, ptr addrspace(1) %gep1, align 437  %add2 = add nuw i32 %base, 138  %zext2 = zext i32 %add2 to i6439  %gep2 = getelementptr inbounds i8,ptr addrspace(1) %arg1, i64 %zext240  %load2 = load i32, ptr addrspace(1) %gep2, align 441  %add3 = add nuw i32 %base, 242  %zext3 = zext i32 %add3 to i6443  %gep3 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 %zext344  %load3 = load i32, ptr addrspace(1) %gep3, align 445  %add4 = add nuw i32 %base, 346  %zext4 = zext i32 %add4 to i6447  %gep4 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 %zext448  %load4 = load i32, ptr addrspace(1) %gep4, align 449  ret void50}51 52; CHECK-LABEL: @vect_zext_bitcast_i8_st4_to_i32_idx53; CHECK: load <4 x i32>54define void @vect_zext_bitcast_i8_st4_to_i32_idx(ptr addrspace(1) %arg1, i32 %base) {55  %add1 = add nuw i32 %base, 056  %zext1 = zext i32 %add1 to i6457  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 %zext158  %load1 = load i32, ptr addrspace(1) %gep1, align 459  %add2 = add nuw i32 %base, 460  %zext2 = zext i32 %add2 to i6461  %gep2 = getelementptr inbounds i8,ptr addrspace(1) %arg1, i64 %zext262  %load2 = load i32, ptr addrspace(1) %gep2, align 463  %add3 = add nuw i32 %base, 864  %zext3 = zext i32 %add3 to i6465  %gep3 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 %zext366  %load3 = load i32, ptr addrspace(1) %gep3, align 467  %add4 = add nuw i32 %base, 1268  %zext4 = zext i32 %add4 to i6469  %gep4 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 %zext470  %load4 = load i32, ptr addrspace(1) %gep4, align 471  ret void72}73 74; CHECK-LABEL: @vect_zext_bitcast_negative_ptr_delta75; CHECK: load <2 x i32>76define void @vect_zext_bitcast_negative_ptr_delta(ptr addrspace(1) %p, i32 %base) {77  %a.offset = add nuw i32 %base, 478  %t.offset.zexted = zext i32 %base to i6479  %a.offset.zexted = zext i32 %a.offset to i6480  %t.ptr = getelementptr inbounds i16, ptr addrspace(1) %p, i64 %t.offset.zexted81  %a.ptr = getelementptr inbounds i16, ptr addrspace(1) %p, i64 %a.offset.zexted82  %b.ptr = getelementptr inbounds i16, ptr addrspace(1) %t.ptr, i64 683  %a.val = load i32, ptr addrspace(1) %a.ptr84  %b.val = load i32, ptr addrspace(1) %b.ptr85  ret void86}87 88; Check i1 corner case89; CHECK-LABEL: @zexted_i1_gep_index90; CHECK: load i3291; CHECK: load i3292define void @zexted_i1_gep_index(ptr addrspace(1) %p, i32 %val) {93  %selector = icmp eq i32 %val, 094  %flipped = xor i1 %selector, 195  %index.0 = zext i1 %selector to i6496  %index.1 = zext i1 %flipped to i6497  %gep.0 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 %index.098  %gep.1 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 %index.199  %val0 = load i32, ptr addrspace(1) %gep.0100  %val1 = load i32, ptr addrspace(1) %gep.1101  ret void102}103 104; Check i1 corner case105; CHECK-LABEL: @sexted_i1_gep_index106; CHECK: load i32107; CHECK: load i32108define void @sexted_i1_gep_index(ptr addrspace(1) %p, i32 %val) {109  %selector = icmp eq i32 %val, 0110  %flipped = xor i1 %selector, 1111  %index.0 = sext i1 %selector to i64112  %index.1 = sext i1 %flipped to i64113  %gep.0 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 %index.0114  %gep.1 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 %index.1115  %val0 = load i32, ptr addrspace(1) %gep.0116  %val1 = load i32, ptr addrspace(1) %gep.1117  ret void118}119 120; CHECK-LABEL: @zexted_i1_gep_index_different_bbs121; CHECK: load i32122; CHECK: load i32123define void @zexted_i1_gep_index_different_bbs(ptr addrspace(1) %p, i32 %val) {124entry:125  %selector = icmp eq i32 %val, 0126  %flipped = xor i1 %selector, 1127  %index.0 = zext i1 %selector to i64128  %index.1 = zext i1 %flipped to i64129  %gep.0 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 %index.0130  br label %next131 132next:133  %gep.1 = getelementptr inbounds i32, ptr addrspace(1) %p, i64 %index.1134  %val0 = load i32, ptr addrspace(1) %gep.0135  %val1 = load i32, ptr addrspace(1) %gep.1136  ret void137}138