| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt < %s -passes=jump-threading,instcombine -S | FileCheck %s |
| |
| define { ptr, i32 } @assume_on_different_value(i32 %_Precision, i1 %cmp6) { |
| ; CHECK-LABEL: define { ptr, i32 } @assume_on_different_value( |
| ; CHECK-SAME: i32 [[_PRECISION:%.*]], i1 [[CMP6:%.*]]) { |
| ; CHECK-NEXT: [[ENTRY:.*]]: |
| ; CHECK-NEXT: br i1 [[CMP6]], label %[[IF_END_I:.*]], label %[[IF_END16:.*]] |
| ; CHECK: [[IF_END16]]: |
| ; CHECK-NEXT: [[REF_TMP_SROA_0_0_INSERT_EXT:%.*]] = zext i32 [[_PRECISION]] to i64 |
| ; CHECK-NEXT: [[TMP0:%.*]] = inttoptr i64 [[REF_TMP_SROA_0_0_INSERT_EXT]] to ptr |
| ; CHECK-NEXT: [[CMP_I:%.*]] = icmp sgt i32 [[_PRECISION]], 0 |
| ; CHECK-NEXT: br i1 [[CMP_I]], label %[[IF_THEN_I:.*]], label %[[IF_END_I]] |
| ; CHECK: [[IF_THEN_I]]: |
| ; CHECK-NEXT: ret { ptr, i32 } zeroinitializer |
| ; CHECK: [[IF_END_I]]: |
| ; CHECK-NEXT: [[TMP1:%.*]] = phi ptr [ [[TMP0]], %[[IF_END16]] ], [ null, %[[ENTRY]] ] |
| ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP1]], i64 8), "nonnull"(ptr [[TMP1]]), "dereferenceable"(ptr [[TMP1]], i64 1) ] |
| ; CHECK-NEXT: ret { ptr, i32 } zeroinitializer |
| ; |
| entry: |
| br i1 %cmp6, label %if.end16, label %if.else |
| |
| if.else: ; preds = %entry |
| br label %if.end16 |
| |
| if.end16: ; preds = %if.else, %entry |
| %_Precision.addr.0 = phi i32 [ %_Precision, %if.else ], [ 0, %entry ] |
| %ref.tmp.sroa.0.0.insert.ext = zext i32 %_Precision.addr.0 to i64 |
| %0 = inttoptr i64 %ref.tmp.sroa.0.0.insert.ext to ptr |
| %cmp.i = icmp sgt i32 %_Precision.addr.0, 0 |
| br i1 %cmp.i, label %if.then.i, label %if.end.i |
| |
| if.then.i: ; preds = %if.end16 |
| ret { ptr, i32 } zeroinitializer |
| |
| if.end.i: ; preds = %if.end16 |
| call void @llvm.assume(i1 true) [ "align"(ptr %0, i64 8), "nonnull"(ptr %0), "dereferenceable"(ptr %0, i64 1) ] |
| ret { ptr, i32 } zeroinitializer |
| } |