105 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=licm %s | FileCheck %s --check-prefix=NO_ASSUME3; RUN: opt -S -passes=licm --enable-knowledge-retention %s | FileCheck %s --check-prefix=USE_ASSUME4; ModuleID = '../pr23608.ll'5target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"6target triple = "x86_64-unknown-linux-gnu"7 8%struct.PyFrameObject = type { i32 }9 10@a = common global ptr null, align 811@__msan_origin_tls = external thread_local(initialexec) global i3212 13define void @fn1() {14; NO_ASSUME-LABEL: @fn1(15; NO_ASSUME-NEXT: entry:16; NO_ASSUME-NEXT: br label [[INDIRECTGOTO:%.*]]17; NO_ASSUME: while.cond:18; NO_ASSUME-NEXT: [[TMP:%.*]] = load ptr, ptr @a, align 819; NO_ASSUME-NEXT: br label [[BB2:%.*]]20; NO_ASSUME: bb:21; NO_ASSUME-NEXT: call void @__msan_warning_noreturn()22; NO_ASSUME-NEXT: unreachable23; NO_ASSUME: bb2:24; NO_ASSUME-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[TMP]] to i6425; NO_ASSUME-NEXT: [[TOBOOL:%.*]] = icmp eq i64 [[TMP4]], 026; NO_ASSUME-NEXT: br i1 [[TOBOOL]], label [[BB13:%.*]], label [[BB15:%.*]]27; NO_ASSUME: bb13:28; NO_ASSUME-NEXT: [[TMP4_LCSSA:%.*]] = phi i64 [ [[TMP4]], [[BB2]] ]29; NO_ASSUME-NEXT: [[TMP8_LE:%.*]] = inttoptr i64 [[TMP4_LCSSA]] to ptr30; NO_ASSUME-NEXT: call void @__msan_warning_noreturn()31; NO_ASSUME-NEXT: unreachable32; NO_ASSUME: bb15:33; NO_ASSUME-NEXT: br i1 [[TOBOOL]], label [[WHILE_END:%.*]], label [[WHILE_COND:%.*]]34; NO_ASSUME: while.end:35; NO_ASSUME-NEXT: ret void36; NO_ASSUME: indirectgoto:37; NO_ASSUME-NEXT: indirectbr ptr null, [label [[INDIRECTGOTO]], label %while.cond]38;39; USE_ASSUME-LABEL: @fn1(40; USE_ASSUME-NEXT: entry:41; USE_ASSUME-NEXT: br label [[INDIRECTGOTO:%.*]]42; USE_ASSUME: while.cond:43; USE_ASSUME-NEXT: [[TMP:%.*]] = load ptr, ptr @a, align 844; USE_ASSUME-NEXT: br label [[BB2:%.*]]45; USE_ASSUME: bb:46; USE_ASSUME-NEXT: call void @__msan_warning_noreturn()47; USE_ASSUME-NEXT: unreachable48; USE_ASSUME: bb2:49; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr [[TMP]], i64 4), "nonnull"(ptr [[TMP]]), "align"(ptr [[TMP]], i64 4) ]50; USE_ASSUME-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[TMP]] to i6451; USE_ASSUME-NEXT: [[TOBOOL:%.*]] = icmp eq i64 [[TMP4]], 052; USE_ASSUME-NEXT: br i1 [[TOBOOL]], label [[BB13:%.*]], label [[BB15:%.*]]53; USE_ASSUME: bb13:54; USE_ASSUME-NEXT: [[TMP4_LCSSA:%.*]] = phi i64 [ [[TMP4]], [[BB2]] ]55; USE_ASSUME-NEXT: [[TMP8_LE:%.*]] = inttoptr i64 [[TMP4_LCSSA]] to ptr56; USE_ASSUME-NEXT: call void @__msan_warning_noreturn()57; USE_ASSUME-NEXT: unreachable58; USE_ASSUME: bb15:59; USE_ASSUME-NEXT: br i1 [[TOBOOL]], label [[WHILE_END:%.*]], label [[WHILE_COND:%.*]]60; USE_ASSUME: while.end:61; USE_ASSUME-NEXT: ret void62; USE_ASSUME: indirectgoto:63; USE_ASSUME-NEXT: indirectbr ptr null, [label [[INDIRECTGOTO]], label %while.cond]64;65entry:66 br label %indirectgoto67 68while.cond: ; preds = %indirectgoto, %bb1569 %tmp = load ptr, ptr @a, align 870 %and = and i64 ptrtoint (ptr @a to i64), -7036874417766571 %itop = inttoptr i64 %and to ptr72 %_msld = load i64, ptr %itop, align 873 %add = add i64 %and, 3518437208883274 %itop2 = inttoptr i64 %add to ptr75 %tmp1 = load i32, ptr %itop2, align 876 br label %bb277 78bb: ; preds = %while.cond79 call void @__msan_warning_noreturn()80 unreachable81 82bb2: ; preds = %while.cond83 %tmp3 = load i32, ptr %tmp, align 484 %tmp4 = ptrtoint ptr %tmp to i6485 %tmp8 = inttoptr i64 %tmp4 to ptr86 %tobool = icmp eq i64 %tmp4, 087 br i1 %tobool, label %bb13, label %bb1588 89bb13: ; preds = %bb290 %.lcssa7 = phi ptr [ %tmp8, %bb2 ]91 call void @__msan_warning_noreturn()92 unreachable93 94bb15: ; preds = %bb295 br i1 %tobool, label %while.end, label %while.cond96 97while.end: ; preds = %bb1598 ret void99 100indirectgoto: ; preds = %indirectgoto, %entry101 indirectbr ptr null, [label %indirectgoto, label %while.cond]102}103 104declare void @__msan_warning_noreturn()105