113ffde31SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2361cba22SArthur Eubanks; RUN: opt -passes='require<demanded-bits>,constraint-elimination,require<demanded-bits>' -disable-verify -verify-analysis-invalidation=false -debug-pass-manager -disable-output %s 2>&1 | FileCheck %s 32812a141SFlorian Hahn 42812a141SFlorian Hahn; Check that constraint-elimination properly invalidates anlyses. 52812a141SFlorian Hahn 62812a141SFlorian Hahn; FIXME: ssub simplification currently doesn't properly set the change status 72812a141SFlorian Hahn; after modifying the IR, which causes DemandedBits to be preserved. 82812a141SFlorian Hahn 9586784a2SFlorian Hahn; CHECK: Running pass: RequireAnalysisPass 102812a141SFlorian Hahn; CHECK-NEXT: Running analysis: DemandedBitsAnalysis on ssub_no_overflow_due_to_or_conds 112812a141SFlorian Hahn; CHECK-NEXT: Running analysis: AssumptionAnalysis on ssub_no_overflow_due_to_or_conds 122812a141SFlorian Hahn; CHECK-NEXT: Running analysis: TargetIRAnalysis on ssub_no_overflow_due_to_or_conds 132812a141SFlorian Hahn; CHECK-NEXT: Running analysis: DominatorTreeAnalysis on ssub_no_overflow_due_to_or_conds 14586784a2SFlorian Hahn; CHECK-NEXT: Running pass: ConstraintEliminationPass on ssub_no_overflow_due_to_or_conds 15*e6a1657fSFlorian Hahn; CHECK-NEXT: Running analysis: LoopAnalysis on ssub_no_overflow_due_to_or_conds 16*e6a1657fSFlorian Hahn; CHECK-NEXT: Running analysis: ScalarEvolutionAnalysis on ssub_no_overflow_due_to_or_conds 17*e6a1657fSFlorian Hahn; CHECK-NEXT: Running analysis: TargetLibraryAnalysis on ssub_no_overflow_due_to_or_conds 18f0442173SFlorian Hahn; CHECK-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis on ssub_no_overflow_due_to_or_conds 193fe6ddd9SFlorian Hahn; CHECK-NEXT: Invalidating analysis: DemandedBitsAnalysis on ssub_no_overflow_due_to_or_conds 20586784a2SFlorian Hahn; CHECK-NEXT: Running pass: RequireAnalysisPass 213fe6ddd9SFlorian Hahn; CHECK-NEXT: Running analysis: DemandedBitsAnalysis on ssub_no_overflow_due_to_or_conds 222812a141SFlorian Hahn 23586784a2SFlorian Hahn; CHECK-NEXT: Running pass: RequireAnalysisPass 242812a141SFlorian Hahn; CHECK-NEXT: Running analysis: DemandedBitsAnalysis on uge_zext 252812a141SFlorian Hahn; CHECK-NEXT: Running analysis: AssumptionAnalysis on uge_zext 262812a141SFlorian Hahn; CHECK-NEXT: Running analysis: TargetIRAnalysis on uge_zext 272812a141SFlorian Hahn; CHECK-NEXT: Running analysis: DominatorTreeAnalysis on uge_zext 28586784a2SFlorian Hahn; CHECK-NEXT: Running pass: ConstraintEliminationPass on uge_zext 29*e6a1657fSFlorian Hahn; CHECK-NEXT: Running analysis: LoopAnalysis on uge_zext 30*e6a1657fSFlorian Hahn; CHECK-NEXT: Running analysis: ScalarEvolutionAnalysis on uge_zext 31*e6a1657fSFlorian Hahn; CHECK-NEXT: Running analysis: TargetLibraryAnalysis on uge_zext 32f0442173SFlorian Hahn; CHECK-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis on uge_zext 332812a141SFlorian Hahn; CHECK-NEXT: Invalidating analysis: DemandedBitsAnalysis on uge_zext 34586784a2SFlorian Hahn; CHECK-NEXT: Running pass: RequireAnalysisPass 352812a141SFlorian Hahn; CHECK-NEXT: Running analysis: DemandedBitsAnalysis on uge_zext 362812a141SFlorian Hahn 372812a141SFlorian Hahndeclare { i8, i1 } @llvm.ssub.with.overflow.i8(i8, i8) 382812a141SFlorian Hahn 392812a141SFlorian Hahndefine i8 @ssub_no_overflow_due_to_or_conds(i8 %a, i8 %b) { 402812a141SFlorian Hahnentry: 412812a141SFlorian Hahn %c.1 = icmp sle i8 %b, %a 422812a141SFlorian Hahn %c.2 = icmp slt i8 %a, 0 432812a141SFlorian Hahn %or.cond = or i1 %c.2, %c.1 442812a141SFlorian Hahn br i1 %or.cond, label %exit.fail, label %math 452812a141SFlorian Hahn 462812a141SFlorian Hahnmath: 472812a141SFlorian Hahn %op = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %b, i8 %a) 482812a141SFlorian Hahn %status = extractvalue { i8, i1 } %op, 1 492812a141SFlorian Hahn br i1 %status, label %exit.fail, label %exit.ok 502812a141SFlorian Hahn 512812a141SFlorian Hahnexit.ok: 522812a141SFlorian Hahn %res = extractvalue { i8, i1 } %op, 0 532812a141SFlorian Hahn ret i8 %res 542812a141SFlorian Hahn 552812a141SFlorian Hahnexit.fail: 562812a141SFlorian Hahn ret i8 0 572812a141SFlorian Hahn} 582812a141SFlorian Hahn 592812a141SFlorian Hahndeclare void @use_res({ i8, i1 }) 602812a141SFlorian Hahn 612812a141SFlorian Hahn 622812a141SFlorian Hahndefine i1 @uge_zext(i8 %x, i16 %y) { 632812a141SFlorian Hahnentry: 642812a141SFlorian Hahn %x.ext = zext i8 %x to i16 652812a141SFlorian Hahn %c.1 = icmp uge i16 %x.ext, %y 662812a141SFlorian Hahn br i1 %c.1, label %bb1, label %bb2 672812a141SFlorian Hahn 682812a141SFlorian Hahnbb1: 692812a141SFlorian Hahn %t.1 = icmp uge i16 %x.ext, %y 702812a141SFlorian Hahn ret i1 %t.1 712812a141SFlorian Hahn 722812a141SFlorian Hahnbb2: 732812a141SFlorian Hahn ret i1 false 742812a141SFlorian Hahn} 7513ffde31SFlorian Hahn;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 7613ffde31SFlorian Hahn; CHECK: {{.*}} 77