brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · a8fc550 Raw
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