74 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -passes=newgvn -S < %s | FileCheck %s3 4target datalayout = "e-p:64:64:64"5 6; GVN should ignore the store to p[1] to see that the load from p[0] is7; fully redundant.8 9define void @yes(i1 %c, ptr %p, ptr %q) nounwind {10; CHECK-LABEL: define void @yes11; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) #[[ATTR0:[0-9]+]] {12; CHECK-NEXT: entry:13; CHECK-NEXT: store i32 0, ptr [[P]], align 414; CHECK-NEXT: [[P1:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 115; CHECK-NEXT: store i32 1, ptr [[P1]], align 416; CHECK-NEXT: br i1 [[C]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]17; CHECK: if.then:18; CHECK-NEXT: store i32 0, ptr [[Q]], align 419; CHECK-NEXT: ret void20; CHECK: if.else:21; CHECK-NEXT: ret void22;23entry:24 store i32 0, ptr %p25 %p1 = getelementptr inbounds i32, ptr %p, i64 126 store i32 1, ptr %p127 br i1 %c, label %if.else, label %if.then28 29if.then:30 %t = load i32, ptr %p31 store i32 %t, ptr %q32 ret void33 34if.else:35 ret void36}37 38; GVN should ignore the store to p[1] to see that the first load from p[0] is39; fully redundant. However, the second load is larger, so it's not a simple40; redundancy.41 42define void @watch_out_for_size_change(i1 %c, ptr %p, ptr %q) nounwind {43; CHECK-LABEL: define void @watch_out_for_size_change44; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) #[[ATTR0]] {45; CHECK-NEXT: entry:46; CHECK-NEXT: store i32 0, ptr [[P]], align 447; CHECK-NEXT: [[P1:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 148; CHECK-NEXT: store i32 1, ptr [[P1]], align 449; CHECK-NEXT: br i1 [[C]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]50; CHECK: if.then:51; CHECK-NEXT: store i32 0, ptr [[Q]], align 452; CHECK-NEXT: ret void53; CHECK: if.else:54; CHECK-NEXT: [[T64:%.*]] = load i64, ptr [[P]], align 455; CHECK-NEXT: store i64 [[T64]], ptr [[Q]], align 456; CHECK-NEXT: ret void57;58entry:59 store i32 0, ptr %p60 %p1 = getelementptr inbounds i32, ptr %p, i64 161 store i32 1, ptr %p162 br i1 %c, label %if.else, label %if.then63 64if.then:65 %t = load i32, ptr %p66 store i32 %t, ptr %q67 ret void68 69if.else:70 %t64 = load i64, ptr %p71 store i64 %t64, ptr %q72 ret void73}74