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