Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / JumpThreading / indirectbr-cast-int-op.ll
blobe3faa50810b74a6f2eaef13480942664ce2cc877
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=jump-threading -S < %s | FileCheck %s
4 ; The indirectbr needs a block address. The add can't produce that.
5 ; This shouldn't crash.
6 define 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
17 bb:
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]
21 bb2:
22   unreachable
23 bb3:
24   ret void
27 ; The indirectbr needs a block address. The add can't produce that.
28 ; This shouldn't crash.
29 define 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
40 bb:
41   %op = add i1 %x, %y
42   %cast = inttoptr i1 %op to ptr
43   indirectbr ptr %cast, [label %bb3, label %bb2]
44 bb2:
45   unreachable
46 bb3:
47   ret void
50 ; The indirectbr needs a block address. The cmp can't produce that.
51 ; This shouldn't crash.
52 define 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
63 bb:
64   %op = icmp slt i1 %x, %y
65   %cast = inttoptr i1 %op to ptr
66   indirectbr ptr %cast, [label %bb3, label %bb2]
67 bb2:
68   unreachable
69 bb3:
70   ret void