blob: 3565004ba9ba76976bd2b8e0fed53bc003e0d57c [file] [edit]
; 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
}