brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · 9242203 Raw
159 lines · plain
1; RUN: opt -passes=aa-eval -aa-pipeline=nvptx-aa -print-all-alias-modref-info < %s -S 2>&1 \2; RUN:   | FileCheck %s --check-prefixes CHECK-ALIAS3;4; RUN: opt -aa-pipeline=nvptx-aa -passes=licm < %s -S | FileCheck %s --check-prefixes CHECK-AA-CONST5; RUN: opt -aa-pipeline=basic-aa -passes=licm < %s -S | FileCheck %s --check-prefixes CHECK-NOAA-CONST6 7target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"8target triple = "nvptx64-nvidia-cuda"9 10; CHECK-ALIAS-LABEL: Function: test11; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(1)* %global12; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(3)* %shared13; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(3)* %shared14; CHECK-ALIAS: MayAlias: i8 addrspace(4)* %const, i8* %gen15; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(1)* %global16; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(3)* %shared17; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(5)* %local18; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(5)* %local19; CHECK-ALIAS: NoAlias:  i8 addrspace(5)* %local, i8 addrspace(3)* %shared20; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(5)* %local21; CHECK-ALIAS: MayAlias:     i8* %gen, i8 addrspace(7)* %shared_cluster22; CHECK-ALIAS: NoAlias:      i8 addrspace(1)* %global, i8 addrspace(7)* %shared_cluster23; CHECK-ALIAS: MayAlias:     i8 addrspace(3)* %shared, i8 addrspace(7)* %shared_cluster24; CHECK-ALIAS: NoAlias:      i8 addrspace(4)* %const, i8 addrspace(7)* %shared_cluster25; CHECK-ALIAS: NoAlias:      i8 addrspace(5)* %local, i8 addrspace(7)* %shared_cluster26; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(101)* %param27; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(101)* %param28; CHECK-ALIAS: NoAlias:  i8 addrspace(101)* %param, i8 addrspace(3)* %shared29; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(101)* %param30; CHECK-ALIAS: NoAlias:  i8 addrspace(5)* %local, i8 addrspace(101)* %param31; CHECK-ALIAS: NoAlias:  i8 addrspace(101)* %param, i8 addrspace(7)* %shared_cluster32 33define i8 @test_alias(ptr %gen, ptr addrspace(1) %global, ptr addrspace(3) %shared, ptr addrspace(4) %const, ptr addrspace(5) %local, ptr addrspace(7) %shared_cluster) {34  %param = addrspacecast ptr %gen to ptr addrspace(101)35  %v1 = load i8, ptr %gen36  %v2 = load i8, ptr addrspace(1) %global37  %v3 = load i8, ptr addrspace(3) %shared38  %v4 = load i8, ptr addrspace(4) %const39  %v5 = load i8, ptr addrspace(5) %local40  %v6 = load i8, ptr addrspace(7) %shared_cluster41  %v7 = load i8, ptr addrspace(101) %param42  %res1 = add i8 %v1, %v243  %res2 = add i8 %res1, %v344  %res3 = add i8 %res2, %v445  %res4 = add i8 %res3, %v546  %res5 = add i8 %res4, %v647  %res6 = add i8 %res4, %v748  ret i8 %res549}50 51; CHECK-ALIAS-LABEL: Function: test_const52; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(1)* %global53; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(1)* %global54; CHECK-ALIAS: MayAlias: i8 addrspace(4)* %const, i8* %gen55;56define i8 @test_const(ptr %gen, ptr addrspace(1) %global, ptr addrspace(4) %const) {57;58; Even though %gen and %const may alias and there is a store to %gen,59; LICM should be able to hoist %load_const because it is known to be60; constant (AA::pointsToConstantMemory()).61;62; CHECK-AA-CONST-LABEL: @test_const63; CHECK-AA-CONST-LABEL: entry64; CHECK-AA-CONST: %[[LOAD_CONST:.+]] = load i8, ptr addrspace(4)65; CHECK-AA-CONST-LABEL: loop66; CHECK-AA-CONST: add {{.*}}%[[LOAD_CONST]]67;68; Without NVPTX AA the load is left in the loop because we assume that69; it may be clobbered by the store.70;71; CHECK-NOAA-CONST-LABEL: @test_const72; CHECK-NOAA-CONST-LABEL: loop73; CHECK-NOAA-CONST: %[[LOAD_CONST:.+]] = load i8, ptr addrspace(4)74; CHECK-NOAA-CONST: add {{.*}}%[[LOAD_CONST]]75entry:76  br label %loop77loop:78  %v = phi i8 [0, %entry], [%v2, %loop]79  %load_global = load i8, ptr addrspace(1) %global80  store i8 %load_global, ptr %gen81  %load_const = load i8, ptr addrspace(4) %const82  %v2 = add i8 %v, %load_const83  %cond = icmp eq i8 %load_const, 084  br i1 %cond, label %done, label %loop85done:86  ret i8 %v287}88 89; Same as @test_const above, but for param space.90;91; CHECK-ALIAS-LABEL: Function: test_param92; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(1)* %global93; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(101)* %param94; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(101)* %param95;96define i8 @test_param(ptr %gen, ptr addrspace(1) %global, ptr %param_gen) {97;98; CHECK-AA-CONST-LABEL: @test_param99; CHECK-AA-CONST-LABEL: entry100; CHECK-AA-CONST: %[[LOAD_PARAM:.+]] = load i8, ptr addrspace(101)101; CHECK-AA-CONST-LABEL: loop102; CHECK-AA-CONST: add {{.*}}%[[LOAD_PARAM]]103;104; CHECK-NOAA-CONST-LABEL: @test_param105; CHECK-NOAA-CONST-LABEL: loop106; CHECK-NOAA-CONST: %[[LOAD_PARAM:.+]] = load i8, ptr addrspace(101)107; CHECK-NOAA-CONST: add {{.*}}%[[LOAD_PARAM]]108entry:109  %param = addrspacecast ptr %param_gen to ptr addrspace(101)110  br label %loop111loop:112  %v = phi i8 [0, %entry], [%v2, %loop]113  %load_global = load i8, ptr addrspace(1) %global114  store i8 %load_global, ptr %gen115  %load_const = load i8, ptr addrspace(101) %param116  %v2 = add i8 %v, %load_const117  %cond = icmp eq i8 %load_const, 0118  br i1 %cond, label %done, label %loop119done:120  ret i8 %v2121}122 123;; Address space information may be encoded anywhere along the UD chain.124;; We define a set of tests that:125;;  1. Perform some number of address space casts on pointer A and B126;;  2. Store a value to address A127;;  3. Store a value to address B (that we know does not alias with A)128 129;; generic->space130; CHECK-ALIAS-LABEL: Function: test_traversal_gen_space131; CHECK-ALIAS: NoAlias: i32 addrspace(1)* %global, i32 addrspace(5)* %local132define void @test_traversal_gen_space(ptr %gen, ptr addrspace(1) %global) {133  %local = addrspacecast ptr %gen to ptr addrspace(5)134  store i32 1, ptr addrspace(5) %local, align 8135  store i32 5, ptr addrspace(1) %global, align 8136  ret void137}138 139;; space->generic140; CHECK-ALIAS-LABEL: Function: test_traversal_space_gen141; CHECK-ALIAS: NoAlias: i32* %gen, i32 addrspace(1)* %global142define void @test_traversal_space_gen(ptr addrspace(5) %local, ptr addrspace(1) %global) {143  %gen = addrspacecast ptr addrspace(5) %local to ptr144  store i32 2, ptr %gen, align 8145  store i32 5, ptr addrspace(1) %global, align 8146  ret void147}148 149;; generic->space->generic150; CHECK-ALIAS-LABEL: Function: test_traversal_gen_space_gen151; CHECK-ALIAS: NoAlias: i32* %gen2, i32 addrspace(1)* %global152define void @test_traversal_gen_space_gen(ptr %gen1, ptr addrspace(1) %global) {153  %local = addrspacecast ptr %gen1 to ptr addrspace(5)154  %gen2 = addrspacecast ptr addrspace(5) %local to ptr155  store i32 3, ptr %gen2, align 8156  store i32 5, ptr addrspace(1) %global, align 8157  ret void158}159