brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 394db28 Raw
109 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=newgvn < %s | FileCheck %s3 4define ptr addrspace(1) @addrspacecast(ptr %ptr) {5; CHECK-LABEL: @addrspacecast(6; CHECK-NEXT:  block1:7; CHECK-NEXT:    [[Z1:%.*]] = addrspacecast ptr [[PTR:%.*]] to ptr addrspace(1)8; CHECK-NEXT:    br label [[BLOCK2:%.*]]9; CHECK:       block2:10; CHECK-NEXT:    store ptr addrspace(1) [[Z1]], ptr undef, align 811; CHECK-NEXT:    ret ptr addrspace(1) [[Z1]]12;13block1:14  %z1 = addrspacecast ptr %ptr to ptr addrspace(1)15  br label %block216 17block2:18  %z2 = addrspacecast ptr %ptr to ptr addrspace(1)19  store ptr addrspace(1) %z1, ptr undef20  ret ptr addrspace(1) %z221}22 23; Make sure casts with the same source value but different result24; address spaces aren't incorrectly merged.25define ptr addrspace(1) @addrspacecast_different_result_types(ptr %ptr) {26; CHECK-LABEL: @addrspacecast_different_result_types(27; CHECK-NEXT:  block1:28; CHECK-NEXT:    [[Z1:%.*]] = addrspacecast ptr [[PTR:%.*]] to ptr addrspace(2)29; CHECK-NEXT:    br label [[BLOCK2:%.*]]30; CHECK:       block2:31; CHECK-NEXT:    [[Z2:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(1)32; CHECK-NEXT:    store ptr addrspace(2) [[Z1]], ptr undef, align 833; CHECK-NEXT:    ret ptr addrspace(1) [[Z2]]34;35block1:36  %z1 = addrspacecast ptr %ptr to ptr addrspace(2)37  br label %block238 39block2:40  %z2 = addrspacecast ptr %ptr to ptr addrspace(1)41  store ptr addrspace(2) %z1, ptr undef42  ret ptr addrspace(1) %z243}44 45define ptr addrspace(1) @addrspacecast_simplify(ptr addrspace(1) %ptr) {46; CHECK-LABEL: @addrspacecast_simplify(47; CHECK-NEXT:  block1:48; CHECK-NEXT:    [[CAST0:%.*]] = addrspacecast ptr addrspace(1) [[PTR:%.*]] to ptr49; CHECK-NEXT:    br label [[BLOCK2:%.*]]50; CHECK:       block2:51; CHECK-NEXT:    store ptr addrspace(1) [[PTR]], ptr undef, align 852; CHECK-NEXT:    ret ptr addrspace(1) [[PTR]]53;54block1:55  %cast0 = addrspacecast ptr addrspace(1) %ptr to ptr56  %z1 = addrspacecast ptr %cast0 to ptr addrspace(1)57  br label %block258 59block2:60  %z2 = addrspacecast ptr %cast0 to ptr addrspace(1)61  store ptr addrspace(1) %z1, ptr undef62  ret ptr addrspace(1) %z263}64 65@h = common local_unnamed_addr global ptr null, align 466 67define ptr addrspace(1) @addrspacecast_constant() {68; CHECK-LABEL: @addrspacecast_constant(69; CHECK-NEXT:  block1:70; CHECK-NEXT:    store ptr undef, ptr @h, align 471; CHECK-NEXT:    br label [[BLOCK2:%.*]]72; CHECK:       block2:73; CHECK-NEXT:    store ptr addrspace(1) undef, ptr undef, align 874; CHECK-NEXT:    ret ptr addrspace(1) undef75;76block1:77  store ptr undef, ptr @h, align 478  %ptr = load ptr, ptr @h, align 479  %z1 = addrspacecast ptr %ptr to ptr addrspace(1)80  br label %block281 82block2:83  %z2 = addrspacecast ptr %ptr to ptr addrspace(1)84  store ptr addrspace(1) %z1, ptr undef85  ret ptr addrspace(1) %z286}87 88define ptr addrspace(1) @addrspacecast_leader(ptr %arg.ptr) {89; CHECK-LABEL: @addrspacecast_leader(90; CHECK-NEXT:  block1:91; CHECK-NEXT:    [[LOAD0:%.*]] = load ptr, ptr [[ARG_PTR:%.*]], align 892; CHECK-NEXT:    [[Z1:%.*]] = addrspacecast ptr [[LOAD0]] to ptr addrspace(1)93; CHECK-NEXT:    br label [[BLOCK2:%.*]]94; CHECK:       block2:95; CHECK-NEXT:    store ptr addrspace(1) [[Z1]], ptr undef, align 896; CHECK-NEXT:    ret ptr addrspace(1) [[Z1]]97;98block1:99  %load0 = load ptr, ptr %arg.ptr100  %z1 = addrspacecast ptr %load0 to ptr addrspace(1)101  br label %block2102 103block2:104  %load1 = load ptr, ptr %arg.ptr105  %z2 = addrspacecast ptr %load1 to ptr addrspace(1)106  store ptr addrspace(1) %z1, ptr undef107  ret ptr addrspace(1) %z2108}109