1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=jump-threading -S < %s | FileCheck %s 3 4; The indirectbr needs a block address. The add can't produce that. 5; This shouldn't crash. 6define void @cast_with_binop() { 7; CHECK-LABEL: @cast_with_binop( 8; CHECK-NEXT: bb: 9; CHECK-NEXT: [[OP:%.*]] = add i64 ptrtoint (ptr inttoptr (i32 1 to ptr) to i64), undef 10; CHECK-NEXT: [[CAST:%.*]] = inttoptr i64 [[OP]] to ptr 11; CHECK-NEXT: indirectbr ptr [[CAST]], [label [[BB3:%.*]], label %bb2] 12; CHECK: bb2: 13; CHECK-NEXT: unreachable 14; CHECK: bb3: 15; CHECK-NEXT: ret void 16; 17bb: 18 %op = add i64 ptrtoint (ptr inttoptr (i32 1 to ptr) to i64), undef 19 %cast = inttoptr i64 %op to ptr 20 indirectbr ptr %cast, [label %bb3, label %bb2] 21bb2: 22 unreachable 23bb3: 24 ret void 25} 26 27; The indirectbr needs a block address. The add can't produce that. 28; This shouldn't crash. 29define void @cast_with_i1(i1 %x, i1 %y) { 30; CHECK-LABEL: @cast_with_i1( 31; CHECK-NEXT: bb: 32; CHECK-NEXT: [[OP:%.*]] = add i1 [[X:%.*]], [[Y:%.*]] 33; CHECK-NEXT: [[CAST:%.*]] = inttoptr i1 [[OP]] to ptr 34; CHECK-NEXT: indirectbr ptr [[CAST]], [label [[BB3:%.*]], label %bb2] 35; CHECK: bb2: 36; CHECK-NEXT: unreachable 37; CHECK: bb3: 38; CHECK-NEXT: ret void 39; 40bb: 41 %op = add i1 %x, %y 42 %cast = inttoptr i1 %op to ptr 43 indirectbr ptr %cast, [label %bb3, label %bb2] 44bb2: 45 unreachable 46bb3: 47 ret void 48} 49 50; The indirectbr needs a block address. The cmp can't produce that. 51; This shouldn't crash. 52define void @cast_with_cmp(i1 %x, i1 %y) { 53; CHECK-LABEL: @cast_with_cmp( 54; CHECK-NEXT: bb: 55; CHECK-NEXT: [[OP:%.*]] = icmp slt i1 [[X:%.*]], [[Y:%.*]] 56; CHECK-NEXT: [[CAST:%.*]] = inttoptr i1 [[OP]] to ptr 57; CHECK-NEXT: indirectbr ptr [[CAST]], [label [[BB3:%.*]], label %bb2] 58; CHECK: bb2: 59; CHECK-NEXT: unreachable 60; CHECK: bb3: 61; CHECK-NEXT: ret void 62; 63bb: 64 %op = icmp slt i1 %x, %y 65 %cast = inttoptr i1 %op to ptr 66 indirectbr ptr %cast, [label %bb3, label %bb2] 67bb2: 68 unreachable 69bb3: 70 ret void 71} 72