brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · a0ca096 Raw
130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=ipsccp < %s | FileCheck %s3 4; Test that information about the true/false value of conditions themselves5; is also used, not information implied by comparisions.6 7define i32 @switch(i32 %x) {8; CHECK-LABEL: @switch(9; CHECK-NEXT:    switch i32 [[X:%.*]], label [[CASE_DEFAULT:%.*]] [10; CHECK-NEXT:    i32 0, label [[CASE_0:%.*]]11; CHECK-NEXT:    i32 2, label [[CASE_2:%.*]]12; CHECK-NEXT:    ]13; CHECK:       case.0:14; CHECK-NEXT:    br label [[END:%.*]]15; CHECK:       case.2:16; CHECK-NEXT:    br label [[END]]17; CHECK:       case.default:18; CHECK-NEXT:    br label [[END]]19; CHECK:       end:20; CHECK-NEXT:    ret i32 121;22  switch i32 %x, label %case.default [23  i32 0, label %case.024  i32 2, label %case.225  ]26 27case.0:28  %add = add i32 %x, 129  br label %end30 31case.2:32  %sub = sub i32 %x, 133  br label %end34 35case.default:36  br label %end37 38end:39  %phi = phi i32 [ %add, %case.0 ], [ %sub, %case.2 ], [ 1, %case.default]40  ret i32 %phi41}42 43define i1 @assume(i32 %x) {44; CHECK-LABEL: @assume(45; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 046; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])47; CHECK-NEXT:    ret i1 true48;49  %cmp = icmp sge i32 %x, 050  call void @llvm.assume(i1 %cmp)51  ret i1 %cmp52}53 54define i32 @branch(i32 %x) {55; CHECK-LABEL: @branch(56; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 057; CHECK-NEXT:    br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_THEN2:%.*]]58; CHECK:       if.then1:59; CHECK-NEXT:    br label [[IF2_THEN1:%.*]]60; CHECK:       if2.then1:61; CHECK-NEXT:    br label [[IF2_END:%.*]]62; CHECK:       if2.end:63; CHECK-NEXT:    ret i32 064; CHECK:       if.then2:65; CHECK-NEXT:    br label [[IF3_THEN2:%.*]]66; CHECK:       if3.then2:67; CHECK-NEXT:    br label [[IF3_END:%.*]]68; CHECK:       if3.end:69; CHECK-NEXT:    ret i32 170;71  %cmp = icmp sge i32 %x, 072  br i1 %cmp, label %if.then1, label %if.then273 74if.then1:75  br i1 %cmp, label %if2.then1, label %if2.then276 77if2.then1:78  br label %if2.end79 80if2.then2:81  br label %if2.end82 83if2.end:84  %phi = phi i32 [ 0, %if2.then1 ], [ 1, %if2.then2 ]85  ret i32 %phi86 87if.then2:88  br i1 %cmp, label %if3.then1, label %if3.then289 90if3.then1:91  br label %if3.end92 93if3.then2:94  br label %if3.end95 96if3.end:97  %phi2 = phi i32 [ 0, %if3.then1 ], [ 1, %if3.then2 ]98  ret i32 %phi299}100 101define void @pr46814(i32 %a) {102; CHECK-LABEL: @pr46814(103; CHECK-NEXT:    [[C1:%.*]] = icmp uge i32 [[A:%.*]], 10104; CHECK-NEXT:    [[C2:%.*]] = icmp ult i32 [[A]], 20105; CHECK-NEXT:    [[C3:%.*]] = and i1 [[C1]], [[C2]]106; CHECK-NEXT:    br i1 [[C3]], label [[IF_1:%.*]], label [[EXIT:%.*]]107; CHECK:       if.1:108; CHECK-NEXT:    br label [[IF_2:%.*]]109; CHECK:       if.2:110; CHECK-NEXT:    br i1 true, label [[EXIT]], label [[EXIT]]111; CHECK:       exit:112; CHECK-NEXT:    ret void113;114  %c1 = icmp uge i32 %a, 10115  %c2 = icmp ult i32 %a, 20116  %c3 = and i1 %c1, %c2117  br i1 %c3, label %if.1, label %exit118 119if.1:120  br i1 %c3, label %if.2, label %exit121 122if.2:123  br i1 %c3, label %exit, label %exit124 125exit:126  ret void127}128 129declare void @llvm.assume(i1)130