brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · 08193e7 Raw
225 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instcombine,early-cse -earlycse-debug-hash -S < %s | FileCheck %s3 4define ptr @simplifyNullLaunder() {5; CHECK-LABEL: @simplifyNullLaunder(6; CHECK-NEXT:    ret ptr null7;8  %b2 = call ptr @llvm.launder.invariant.group.p0(ptr null)9  ret ptr %b210}11 12define ptr @dontSimplifyNullLaunderNoNullOpt() #0 {13; CHECK-LABEL: @dontSimplifyNullLaunderNoNullOpt(14; CHECK-NEXT:    [[B2:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr null)15; CHECK-NEXT:    ret ptr [[B2]]16;17  %b2 = call ptr @llvm.launder.invariant.group.p0(ptr null)18  ret ptr %b219}20 21define ptr addrspace(42) @dontsimplifyNullLaunderForDifferentAddrspace() {22; CHECK-LABEL: @dontsimplifyNullLaunderForDifferentAddrspace(23; CHECK-NEXT:    [[B2:%.*]] = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) null)24; CHECK-NEXT:    ret ptr addrspace(42) [[B2]]25;26  %b2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) null)27  ret ptr addrspace(42) %b228}29 30define ptr @simplifyUndefLaunder() {31; CHECK-LABEL: @simplifyUndefLaunder(32; CHECK-NEXT:    ret ptr undef33;34  %b2 = call ptr @llvm.launder.invariant.group.p0(ptr undef)35  ret ptr %b236}37 38define ptr addrspace(42) @simplifyUndefLaunder2() {39; CHECK-LABEL: @simplifyUndefLaunder2(40; CHECK-NEXT:    ret ptr addrspace(42) undef41;42  %b2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) undef)43  ret ptr addrspace(42) %b244}45 46define ptr @simplifyNullStrip() {47; CHECK-LABEL: @simplifyNullStrip(48; CHECK-NEXT:    ret ptr null49;50  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr null)51  ret ptr %b252}53 54define ptr @dontSimplifyNullStripNonNullOpt() #0 {55; CHECK-LABEL: @dontSimplifyNullStripNonNullOpt(56; CHECK-NEXT:    [[B2:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr null)57; CHECK-NEXT:    ret ptr [[B2]]58;59  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr null)60  ret ptr %b261}62 63define ptr addrspace(42) @dontsimplifyNullStripForDifferentAddrspace() {64; CHECK-LABEL: @dontsimplifyNullStripForDifferentAddrspace(65; CHECK-NEXT:    [[B2:%.*]] = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) null)66; CHECK-NEXT:    ret ptr addrspace(42) [[B2]]67;68  %b2 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) null)69  ret ptr addrspace(42) %b270}71 72define ptr @simplifyUndefStrip() {73; CHECK-LABEL: @simplifyUndefStrip(74; CHECK-NEXT:    ret ptr undef75;76  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr undef)77  ret ptr %b278}79 80define ptr addrspace(42) @simplifyUndefStrip2() {81; CHECK-LABEL: @simplifyUndefStrip2(82; CHECK-NEXT:    ret ptr addrspace(42) undef83;84  %b2 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) undef)85  ret ptr addrspace(42) %b286}87 88define ptr @simplifyLaunderOfLaunder(ptr %a) {89; CHECK-LABEL: @simplifyLaunderOfLaunder(90; CHECK-NEXT:    [[A3:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr [[A:%.*]])91; CHECK-NEXT:    ret ptr [[A3]]92;93  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)94  %a3 = call ptr @llvm.launder.invariant.group.p0(ptr %a2)95  ret ptr %a396}97 98define ptr @simplifyStripOfLaunder(ptr %a) {99; CHECK-LABEL: @simplifyStripOfLaunder(100; CHECK-NEXT:    [[A3:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])101; CHECK-NEXT:    ret ptr [[A3]]102;103  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)104  %a3 = call ptr @llvm.strip.invariant.group.p0(ptr %a2)105  ret ptr %a3106}107 108define i1 @simplifyForCompare(ptr %a) {109; CHECK-LABEL: @simplifyForCompare(110; CHECK-NEXT:    [[A3:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])111; CHECK-NEXT:    ret i1 true112;113  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)114 115  %a3 = call ptr @llvm.strip.invariant.group.p0(ptr %a2)116  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr %a)117  %c = icmp eq ptr %a3, %b2118  ret i1 %c119}120 121define ptr @skipWithDifferentTypes(ptr %a) {122; CHECK-LABEL: @skipWithDifferentTypes(123; CHECK-NEXT:    [[A3:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])124; CHECK-NEXT:    ret ptr [[A3]]125;126  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)127 128  %a3 = call ptr @llvm.strip.invariant.group.p0(ptr %a2)129  ret ptr %a3130}131 132define ptr addrspace(42) @skipWithDifferentTypesAddrspace(ptr addrspace(42) %a) {133; CHECK-LABEL: @skipWithDifferentTypesAddrspace(134; CHECK-NEXT:    [[A3:%.*]] = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) [[A:%.*]])135; CHECK-NEXT:    ret ptr addrspace(42) [[A3]]136;137  %a2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) %a)138 139  %a3 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) %a2)140  ret ptr addrspace(42) %a3141}142 143define ptr addrspace(42) @skipWithDifferentTypesDifferentAddrspace(ptr %a) {144; CHECK-LABEL: @skipWithDifferentTypesDifferentAddrspace(145; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])146; CHECK-NEXT:    [[A3:%.*]] = addrspacecast ptr [[TMP1]] to ptr addrspace(42)147; CHECK-NEXT:    ret ptr addrspace(42) [[A3]]148;149  %cast = addrspacecast ptr %a to ptr addrspace(42)150  %a2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) %cast)151 152  %a3 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) %a2)153  ret ptr addrspace(42) %a3154}155 156define i1 @icmp_null_launder(ptr %a) {157; CHECK-LABEL: @icmp_null_launder(158; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null159; CHECK-NEXT:    ret i1 [[R]]160;161  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)162  %r = icmp eq ptr %a2, null163  ret i1 %r164}165 166define i1 @icmp_null_strip(ptr %a) {167; CHECK-LABEL: @icmp_null_strip(168; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null169; CHECK-NEXT:    ret i1 [[R]]170;171  %a2 = call ptr @llvm.strip.invariant.group.p0(ptr %a)172  %r = icmp eq ptr %a2, null173  ret i1 %r174}175 176define i1 @icmp_null_launder_valid_null(ptr %a) #0 {177; CHECK-LABEL: @icmp_null_launder_valid_null(178; CHECK-NEXT:    [[A2:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr [[A:%.*]])179; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A2]], null180; CHECK-NEXT:    ret i1 [[R]]181;182  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)183  %r = icmp eq ptr %a2, null184  ret i1 %r185}186 187define i1 @icmp_null_strip_valid_null(ptr %a) #0 {188; CHECK-LABEL: @icmp_null_strip_valid_null(189; CHECK-NEXT:    [[A2:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])190; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A2]], null191; CHECK-NEXT:    ret i1 [[R]]192;193  %a2 = call ptr @llvm.strip.invariant.group.p0(ptr %a)194  %r = icmp eq ptr %a2, null195  ret i1 %r196}197 198; Check that null always becomes the RHS199define i1 @icmp_null_launder_lhs(ptr %a) {200; CHECK-LABEL: @icmp_null_launder_lhs(201; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null202; CHECK-NEXT:    ret i1 [[R]]203;204  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)205  %r = icmp eq ptr null, %a2206  ret i1 %r207}208 209define i1 @icmp_null_launder_bitcasts(ptr %a) {210; CHECK-LABEL: @icmp_null_launder_bitcasts(211; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null212; CHECK-NEXT:    ret i1 [[R]]213;214  %a3 = call ptr @llvm.launder.invariant.group.p0(ptr %a)215  %r = icmp eq ptr %a3, null216  ret i1 %r217}218 219declare ptr @llvm.launder.invariant.group.p0(ptr)220declare ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42))221declare ptr @llvm.strip.invariant.group.p0(ptr)222declare ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42))223 224attributes #0 = { null_pointer_is_valid }225