brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · a0207cf Raw
204 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=gvn < %s | FileCheck --check-prefixes=CHECK,MDEP %s3; RUN: opt -S -passes='gvn<memoryssa>' < %s | FileCheck %s4 5 6define i64 @test1(i1 %c, i64 %a, i64 %b) {7; CHECK-LABEL: @test1(8; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]9; CHECK:       taken:10; CHECK-NEXT:    br label [[MERGE:%.*]]11; CHECK:       untaken:12; CHECK-NEXT:    br label [[MERGE]]13; CHECK:       merge:14; CHECK-NEXT:    [[PHI1:%.*]] = phi i64 [ [[A:%.*]], [[TAKEN]] ], [ [[B:%.*]], [[UNTAKEN]] ]15; CHECK-NEXT:    ret i64 016;17  br i1 %c, label %taken, label %untaken18taken:19  br label %merge20untaken:21  br label %merge22merge:23  %phi1 = phi i64 [%a, %taken], [%b, %untaken]24  %phi2 = phi i64 [%a, %taken], [%b, %untaken]25  %ret = sub i64 %phi1, %phi226  ret i64 %ret27}28 29declare void @llvm.assume(i1)30 31define i64 @test2(i1 %c, i64 %a, i64 %b) {32; CHECK-LABEL: @test2(33; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]34; CHECK:       taken:35; CHECK-NEXT:    [[ASSUMPTION:%.*]] = icmp eq i64 [[A:%.*]], 036; CHECK-NEXT:    call void @llvm.assume(i1 [[ASSUMPTION]])37; CHECK-NEXT:    br label [[MERGE:%.*]]38; CHECK:       untaken:39; CHECK-NEXT:    br label [[MERGE]]40; CHECK:       merge:41; CHECK-NEXT:    [[PHI1:%.*]] = phi i64 [ 0, [[TAKEN]] ], [ [[B:%.*]], [[UNTAKEN]] ]42; CHECK-NEXT:    ret i64 043;44  br i1 %c, label %taken, label %untaken45taken:46  %assumption = icmp eq i64 %a, 047  call void @llvm.assume(i1 %assumption)48  br label %merge49untaken:50  br label %merge51merge:52  %phi1 = phi i64 [%a, %taken], [%b, %untaken]53  %phi2 = phi i64 [0, %taken], [%b, %untaken]54  %ret = sub i64 %phi1, %phi255  ret i64 %ret56}57 58 59define i64 @test3(i1 %c, i64 %a, i64 %b) {60; CHECK-LABEL: @test3(61; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]62; CHECK:       taken:63; CHECK-NEXT:    [[ADD1:%.*]] = add i64 [[A:%.*]], 564; CHECK-NEXT:    br label [[MERGE:%.*]]65; CHECK:       untaken:66; CHECK-NEXT:    br label [[MERGE]]67; CHECK:       merge:68; CHECK-NEXT:    [[PHI1:%.*]] = phi i64 [ [[ADD1]], [[TAKEN]] ], [ [[B:%.*]], [[UNTAKEN]] ]69; CHECK-NEXT:    ret i64 070;71  br i1 %c, label %taken, label %untaken72taken:73  %add1 = add i64 %a, 574  %add2 = add i64 %a, 575  br label %merge76untaken:77  br label %merge78merge:79  %phi1 = phi i64 [%add1, %taken], [%b, %untaken]80  %phi2 = phi i64 [%add2, %taken], [%b, %untaken]81  %ret = sub i64 %phi1, %phi282  ret i64 %ret83}84 85define i64 @test4(i1 %c, i64 %a, i64 %b) {86; CHECK-LABEL: @test4(87; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]88; CHECK:       taken:89; CHECK-NEXT:    br label [[MERGE:%.*]]90; CHECK:       untaken:91; CHECK-NEXT:    br label [[MERGE]]92; CHECK:       merge:93; CHECK-NEXT:    [[PHI1:%.*]] = phi i64 [ [[A:%.*]], [[TAKEN]] ], [ [[B:%.*]], [[UNTAKEN]] ]94; CHECK-NEXT:    br i1 [[C]], label [[TAKEN2:%.*]], label [[UNTAKEN2:%.*]]95; CHECK:       taken2:96; CHECK-NEXT:    [[ADD1:%.*]] = add i64 [[PHI1]], 597; CHECK-NEXT:    br label [[MERGE2:%.*]]98; CHECK:       untaken2:99; CHECK-NEXT:    br label [[MERGE2]]100; CHECK:       merge2:101; CHECK-NEXT:    [[PHI3:%.*]] = phi i64 [ [[ADD1]], [[TAKEN2]] ], [ [[PHI1]], [[UNTAKEN2]] ]102; CHECK-NEXT:    ret i64 0103;104  br i1 %c, label %taken, label %untaken105taken:106  br label %merge107untaken:108  br label %merge109merge:110  %phi1 = phi i64 [%a, %taken], [%b, %untaken]111  %phi2 = phi i64 [%a, %taken], [%b, %untaken]112  br i1 %c, label %taken2, label %untaken2113taken2:114  %add1 = add i64 %phi1, 5115  %add2 = add i64 %phi2, 5116  br label %merge2117untaken2:118  br label %merge2119merge2:120  %phi3 = phi i64 [%add1, %taken2], [%phi2, %untaken2]121  %phi4 = phi i64 [%add2, %taken2], [%phi2, %untaken2]122  %ret = sub i64 %phi4, %phi3123  ret i64 %ret124}125 126define i64 @test5(i1 %c, i64 %a) {127; CHECK-LABEL: @test5(128; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]129; CHECK:       taken:130; CHECK-NEXT:    [[ASSUMPTION:%.*]] = icmp eq i64 [[A:%.*]], 0131; CHECK-NEXT:    call void @llvm.assume(i1 [[ASSUMPTION]])132; CHECK-NEXT:    br label [[MERGE:%.*]]133; CHECK:       untaken:134; CHECK-NEXT:    br label [[MERGE]]135; CHECK:       merge:136; CHECK-NEXT:    ret i64 0137;138  br i1 %c, label %taken, label %untaken139taken:140  %assumption = icmp eq i64 %a, 0141  call void @llvm.assume(i1 %assumption)142  br label %merge143untaken:144  br label %merge145merge:146  %phi = phi i64 [%a, %taken], [0, %untaken]147  ret i64 %phi148}149 150define i64 @test6(i1 %c, i64 %a) {151; CHECK-LABEL: @test6(152; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]153; CHECK:       taken:154; CHECK-NEXT:    [[ASSUMPTION:%.*]] = icmp eq i64 [[A:%.*]], 0155; CHECK-NEXT:    call void @llvm.assume(i1 [[ASSUMPTION]])156; CHECK-NEXT:    br label [[MERGE:%.*]]157; CHECK:       untaken:158; CHECK-NEXT:    br label [[MERGE]]159; CHECK:       merge:160; CHECK-NEXT:    ret i64 0161;162  br i1 %c, label %taken, label %untaken163taken:164  %assumption = icmp eq i64 %a, 0165  call void @llvm.assume(i1 %assumption)166  br label %next167next:168  br label %merge169untaken:170  br label %merge171merge:172  %phi = phi i64 [%a, %next], [0, %untaken]173  ret i64 %phi174}175 176; negative test, phi use is NOT dominated by assume177define i64 @test7(i1 %c, i64 %a) {178; CHECK-LABEL: @test7(179; CHECK-NEXT:    br i1 [[C:%.*]], label [[TAKEN:%.*]], label [[UNTAKEN:%.*]]180; CHECK:       taken:181; CHECK-NEXT:    [[ASSUMPTION:%.*]] = icmp eq i64 [[A:%.*]], 0182; CHECK-NEXT:    call void @llvm.assume(i1 [[ASSUMPTION]])183; CHECK-NEXT:    br label [[MERGE:%.*]]184; CHECK:       untaken:185; CHECK-NEXT:    br label [[MERGE]]186; CHECK:       merge:187; CHECK-NEXT:    ret i64 [[A]]188;189  br i1 %c, label %taken, label %untaken190taken:191  %assumption = icmp eq i64 %a, 0192  call void @llvm.assume(i1 %assumption)193  br label %merge194untaken:195  br label %merge196merge:197  br label %next198next:199  %phi = phi i64 [%a, %merge]200  ret i64 %phi201}202;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:203; MDEP: {{.*}}204