| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt < %s -passes=instcombine -S | FileCheck %s |
| ; PR2629 |
| |
| define void @f(ptr %x) nounwind { |
| ; CHECK-LABEL: @f( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: br label [[BB:%.*]] |
| ; CHECK: bb: |
| ; CHECK-NEXT: [[L1:%.*]] = load i8, ptr [[X:%.*]], align 1 |
| ; CHECK-NEXT: [[TMP0:%.*]] = add i8 [[L1]], -9 |
| ; CHECK-NEXT: [[C1:%.*]] = icmp ult i8 [[TMP0]], -3 |
| ; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[L1]], -13 |
| ; CHECK-NEXT: [[C2:%.*]] = icmp ult i8 [[TMP1]], -3 |
| ; CHECK-NEXT: [[A1:%.*]] = and i1 [[C1]], [[C2]] |
| ; CHECK-NEXT: br i1 [[A1]], label [[INCOMPATIBLE:%.*]], label [[OKAY:%.*]] |
| ; CHECK: okay: |
| ; CHECK-NEXT: ret void |
| ; CHECK: incompatible: |
| ; CHECK-NEXT: ret void |
| ; |
| entry: |
| br label %bb |
| |
| bb: |
| %l1 = load i8, ptr %x, align 1 |
| %s1 = sub i8 %l1, 6 |
| %c1 = icmp ugt i8 %s1, 2 |
| %s2 = sub i8 %l1, 10 |
| %c2 = icmp ugt i8 %s2, 2 |
| %a1 = and i1 %c1, %c2 |
| br i1 %a1, label %incompatible, label %okay |
| |
| okay: |
| ret void |
| |
| incompatible: |
| ret void |
| } |
| |
| define void @f_logical(ptr %x) nounwind { |
| ; CHECK-LABEL: @f_logical( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: br label [[BB:%.*]] |
| ; CHECK: bb: |
| ; CHECK-NEXT: [[L1:%.*]] = load i8, ptr [[X:%.*]], align 1 |
| ; CHECK-NEXT: [[TMP0:%.*]] = add i8 [[L1]], -9 |
| ; CHECK-NEXT: [[C1:%.*]] = icmp ult i8 [[TMP0]], -3 |
| ; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[L1]], -13 |
| ; CHECK-NEXT: [[C2:%.*]] = icmp ult i8 [[TMP1]], -3 |
| ; CHECK-NEXT: [[A1:%.*]] = and i1 [[C1]], [[C2]] |
| ; CHECK-NEXT: br i1 [[A1]], label [[INCOMPATIBLE:%.*]], label [[OKAY:%.*]] |
| ; CHECK: okay: |
| ; CHECK-NEXT: ret void |
| ; CHECK: incompatible: |
| ; CHECK-NEXT: ret void |
| ; |
| entry: |
| br label %bb |
| |
| bb: |
| %l1 = load i8, ptr %x, align 1 |
| %s1 = sub i8 %l1, 6 |
| %c1 = icmp ugt i8 %s1, 2 |
| %s2 = sub i8 %l1, 10 |
| %c2 = icmp ugt i8 %s2, 2 |
| %a1 = select i1 %c1, i1 %c2, i1 false |
| br i1 %a1, label %incompatible, label %okay |
| |
| okay: |
| ret void |
| |
| incompatible: |
| ret void |
| } |