1626f6ee7SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2626f6ee7SFlorian Hahn; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s 3626f6ee7SFlorian Hahn 4626f6ee7SFlorian Hahndefine i1 @test_overflow_sub_coefficients(i8 %x, i64 %y) { 5626f6ee7SFlorian Hahn; CHECK-LABEL: define i1 @test_overflow_sub_coefficients 6626f6ee7SFlorian Hahn; CHECK-SAME: (i8 [[X:%.*]], i64 [[Y:%.*]]) { 7626f6ee7SFlorian Hahn; CHECK-NEXT: bb: 8626f6ee7SFlorian Hahn; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[X]] to i64 9626f6ee7SFlorian Hahn; CHECK-NEXT: [[SHL:%.*]] = shl nuw nsw i64 [[ZEXT]], 63 10626f6ee7SFlorian Hahn; CHECK-NEXT: [[ICMP:%.*]] = icmp uge i64 [[SHL]], [[Y]] 11626f6ee7SFlorian Hahn; CHECK-NEXT: ret i1 [[ICMP]] 12626f6ee7SFlorian Hahn; 13626f6ee7SFlorian Hahnbb: 14626f6ee7SFlorian Hahn %zext = zext i8 %x to i64 15626f6ee7SFlorian Hahn %shl = shl nuw nsw i64 %zext, 63 16626f6ee7SFlorian Hahn %icmp = icmp uge i64 %shl, %y 17626f6ee7SFlorian Hahn ret i1 %icmp 18626f6ee7SFlorian Hahn} 19626f6ee7SFlorian Hahn 200a0181dcSFlorian Hahndefine i1 @test_overflow_in_negate_constraint(i8 %x, i64 %y) { 21*821c332bSYingwei Zheng; CHECK-LABEL: define i1 @test_overflow_in_negate_constraint 22*821c332bSYingwei Zheng; CHECK-SAME: (i8 [[X:%.*]], i64 [[Y:%.*]]) { 23*821c332bSYingwei Zheng; CHECK-NEXT: bb: 24*821c332bSYingwei Zheng; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[X]] to i64 25*821c332bSYingwei Zheng; CHECK-NEXT: [[SHL:%.*]] = shl nuw nsw i64 [[ZEXT]], 63 26*821c332bSYingwei Zheng; CHECK-NEXT: [[ICMP:%.*]] = icmp uge i64 [[Y]], [[SHL]] 27*821c332bSYingwei Zheng; CHECK-NEXT: ret i1 [[ICMP]] 28*821c332bSYingwei Zheng; 290a0181dcSFlorian Hahnbb: 300a0181dcSFlorian Hahn %zext = zext i8 %x to i64 310a0181dcSFlorian Hahn %shl = shl nuw nsw i64 %zext, 63 320a0181dcSFlorian Hahn %icmp = icmp uge i64 %y, %shl 330a0181dcSFlorian Hahn ret i1 %icmp 340a0181dcSFlorian Hahn} 35626f6ee7SFlorian Hahn 36