Test Failure: Transforms/Util/assume-builder.ll

Test source: git

Log:

Source: /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll
-- 1. ModuleToFunctionPassAdaptor
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 1. PassManager<Function> : Skipping NOP
-- 2. AssumeBuilderPass

----------------------------------------
declare void @func(ptr, ptr)
declare void @func_cold(ptr) willreturn
declare void @func_strbool(ptr)
declare void @func_many(ptr) willreturn
declare void @func_argattr(align(8) ptr, nonnull ptr)
declare void @func_argattr2(noundef align(8) ptr, nonnull noundef ptr)

define void @test(ptr %P, ptr %P1, ptr %P2, ptr %P3) {
bb:
  call void @func(nonnull dereferenceable(16) ptr %P, ptr null)
  call void @func(dereferenceable(12) ptr %P1, nonnull ptr %P)
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func(ptr %P1, ptr %P)
  call void @func_strbool(ptr %P1)
  call void @func(dereferenceable(32) ptr %P, dereferenceable(8) ptr %P)
  call void @func_many(align(8) ptr %P1) willreturn
  call void @func_many(noundef align(8) ptr %P1) willreturn
  call void @func_argattr(align(8) ptr %P2, nonnull ptr %P3)
  call void @func_argattr2(noundef align(8) ptr %P2, nonnull noundef ptr %P3)
  call void @func(nonnull ptr %P1, nonnull ptr %P)
  call void @func(nonnull noundef ptr %P1, nonnull noundef ptr %P)
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 3. AssumeBuilderPass

----------------------------------------
declare void @func(ptr, ptr)
declare void @func_cold(ptr) willreturn
declare void @func_strbool(ptr)
declare void @func_many(ptr) willreturn
declare void @func_argattr(align(8) ptr, nonnull ptr)
declare void @func_argattr2(noundef align(8) ptr, nonnull noundef ptr)

define void @test(ptr %P, ptr %P1, ptr %P2, ptr %P3) {
bb:
  call void @func(nonnull dereferenceable(16) ptr %P, ptr null)
  call void @func(dereferenceable(12) ptr %P1, nonnull ptr %P)
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func(ptr %P1, ptr %P)
  call void @func_strbool(ptr %P1)
  call void @func(dereferenceable(32) ptr %P, dereferenceable(8) ptr %P)
  call void @func_many(align(8) ptr %P1) willreturn
  call void @func_many(noundef align(8) ptr %P1) willreturn
  call void @func_argattr(align(8) ptr %P2, nonnull ptr %P3)
  call void @func_argattr2(noundef align(8) ptr %P2, nonnull noundef ptr %P3)
  call void @func(nonnull ptr %P1, nonnull ptr %P)
  call void @func(nonnull noundef ptr %P1, nonnull noundef ptr %P)
  ret void
}
=>
declare void @func(ptr, ptr)
declare void @func_cold(ptr) willreturn
declare void @func_strbool(ptr)
declare void @func_many(ptr) willreturn
declare void @func_argattr(align(8) ptr, nonnull ptr)
declare void @func_argattr2(noundef align(8) ptr, nonnull noundef ptr)

define void @test(ptr %P, ptr %P1, ptr %P2, ptr %P3) {
bb:
  assume_nonnull ptr %P
  assume_dereferenceable ptr %P, i64 16
  call void @func(nonnull dereferenceable(16) ptr %P, ptr null)
  assume_dereferenceable ptr %P1, i64 12
  call void @func(dereferenceable(12) ptr %P1, nonnull ptr %P)
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func(ptr %P1, ptr %P)
  call void @func_strbool(ptr %P1)
  assume_dereferenceable ptr %P, i64 32
  call void @func(dereferenceable(32) ptr %P, dereferenceable(8) ptr %P)
  call void @func_many(align(8) ptr %P1) willreturn
  assume_welldefined ptr %P1
  assume_align ptr %P1, i64 8
  call void @func_many(noundef align(8) ptr %P1) willreturn
  call void @func_argattr(align(8) ptr %P2, nonnull ptr %P3)
  assume_welldefined ptr %P2
  assume_align ptr %P2, i64 8
  assume_welldefined ptr %P3
  assume_nonnull ptr %P3
  call void @func_argattr2(noundef align(8) ptr %P2, nonnull noundef ptr %P3)
  call void @func(nonnull ptr %P1, nonnull ptr %P)
  assume_nonnull ptr %P1
  assume_welldefined ptr %P
  call void @func(nonnull noundef ptr %P1, nonnull noundef ptr %P)
  ret void
}
Transformation seems to be correct!

-- 4. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 5. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 6. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 7. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 8. AssumeSimplifyPass

----------------------------------------
declare void @func(ptr, ptr)
declare void @func_cold(ptr) willreturn
declare void @func_strbool(ptr)
declare void @func_many(ptr) willreturn
declare void @func_argattr(align(8) ptr, nonnull ptr)
declare void @func_argattr2(noundef align(8) ptr, nonnull noundef ptr)

define void @test(ptr %P, ptr %P1, ptr %P2, ptr %P3) {
bb:
  assume_nonnull ptr %P
  assume_dereferenceable ptr %P, i64 16
  assume i1 1
  call void @func(nonnull dereferenceable(16) ptr %P, ptr null)
  assume_dereferenceable ptr %P1, i64 12
  assume i1 1
  call void @func(dereferenceable(12) ptr %P1, nonnull ptr %P)
  assume i1 1
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  assume i1 1
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func(ptr %P1, ptr %P)
  call void @func_strbool(ptr %P1)
  assume_dereferenceable ptr %P, i64 32
  assume i1 1
  call void @func(dereferenceable(32) ptr %P, dereferenceable(8) ptr %P)
  call void @func_many(align(8) ptr %P1) willreturn
  assume_welldefined ptr %P1
  assume_align ptr %P1, i64 8
  assume i1 1
  call void @func_many(noundef align(8) ptr %P1) willreturn
  call void @func_argattr(align(8) ptr %P2, nonnull ptr %P3)
  assume_welldefined ptr %P2
  assume_align ptr %P2, i64 8
  assume_welldefined ptr %P3
  assume_nonnull ptr %P3
  assume i1 1
  call void @func_argattr2(noundef align(8) ptr %P2, nonnull noundef ptr %P3)
  call void @func(nonnull ptr %P1, nonnull ptr %P)
  assume_nonnull ptr %P1
  assume_welldefined ptr %P
  assume i1 1
  call void @func(nonnull noundef ptr %P1, nonnull noundef ptr %P)
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 9. AssumeSimplifyPass

----------------------------------------
declare void @func(ptr, ptr)
declare void @func_cold(ptr) willreturn
declare void @func_strbool(ptr)
declare void @func_many(ptr) willreturn
declare void @func_argattr(align(8) ptr, nonnull ptr)
declare void @func_argattr2(noundef align(8) ptr, nonnull noundef ptr)

define void @test(ptr %P, ptr %P1, ptr %P2, ptr %P3) {
bb:
  assume_nonnull ptr %P
  assume_dereferenceable ptr %P, i64 16
  call void @func(nonnull dereferenceable(16) ptr %P, ptr null)
  assume_dereferenceable ptr %P1, i64 12
  call void @func(dereferenceable(12) ptr %P1, nonnull ptr %P)
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func(ptr %P1, ptr %P)
  call void @func_strbool(ptr %P1)
  assume_dereferenceable ptr %P, i64 32
  call void @func(dereferenceable(32) ptr %P, dereferenceable(8) ptr %P)
  call void @func_many(align(8) ptr %P1) willreturn
  assume_welldefined ptr %P1
  assume_align ptr %P1, i64 8
  call void @func_many(noundef align(8) ptr %P1) willreturn
  call void @func_argattr(align(8) ptr %P2, nonnull ptr %P3)
  assume_welldefined ptr %P2
  assume_align ptr %P2, i64 8
  assume_welldefined ptr %P3
  assume_nonnull ptr %P3
  call void @func_argattr2(noundef align(8) ptr %P2, nonnull noundef ptr %P3)
  call void @func(nonnull ptr %P1, nonnull ptr %P)
  assume_nonnull ptr %P1
  assume_welldefined ptr %P
  call void @func(nonnull noundef ptr %P1, nonnull noundef ptr %P)
  ret void
}
=>
declare void @func(ptr, ptr)
declare void @func_cold(ptr) willreturn
declare void @func_strbool(ptr)
declare void @func_many(ptr) willreturn
declare void @func_argattr(align(8) ptr, nonnull ptr)
declare void @func_argattr2(noundef align(8) ptr, nonnull noundef ptr)

define void @test(ptr nonnull dereferenceable(16) %P, ptr %P1, ptr %P2, ptr %P3) {
bb:
  call void @func(nonnull dereferenceable(16) ptr nonnull dereferenceable(16) %P, ptr null)
  assume_dereferenceable ptr %P1, i64 12
  call void @func(dereferenceable(12) ptr %P1, nonnull ptr nonnull dereferenceable(16) %P)
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func_cold(dereferenceable(12) ptr %P1) willreturn
  call void @func(ptr %P1, ptr nonnull dereferenceable(16) %P)
  call void @func_strbool(ptr %P1)
  assume_dereferenceable ptr nonnull dereferenceable(16) %P, i64 32
  call void @func(dereferenceable(32) ptr nonnull dereferenceable(16) %P, dereferenceable(8) ptr nonnull dereferenceable(16) %P)
  call void @func_many(align(8) ptr %P1) willreturn
  assume_welldefined ptr %P1
  assume_align ptr %P1, i64 8
  call void @func_many(noundef align(8) ptr %P1) willreturn
  call void @func_argattr(align(8) ptr %P2, nonnull ptr %P3)
  assume_welldefined ptr %P2
  assume_align ptr %P2, i64 8
  assume_welldefined ptr %P3
  assume_nonnull ptr %P3
  call void @func_argattr2(noundef align(8) ptr %P2, nonnull noundef ptr %P3)
  call void @func(nonnull ptr %P1, nonnull ptr nonnull dereferenceable(16) %P)
  assume_nonnull ptr %P1
  assume_welldefined ptr nonnull dereferenceable(16) %P
  call void @func(nonnull noundef ptr %P1, nonnull noundef ptr nonnull dereferenceable(16) %P)
  ret void
}
Transformation seems to be correct!

-- 10. VerifierPass : Skipping NOP
-- 11. VerifierPass : Skipping NOP
-- 12. PassManager<Function> : Skipping NOP
-- 13. PassManager<Function> : Skipping NOP
-- 14. AssumeBuilderPass

----------------------------------------
define i32 @test2(ptr %arg, ptr %arg1, ptr %arg2) {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 8
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  %i19 = load i8, ptr %i18, align 4
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
Transformation seems to be correct! (syntactically equal)

-- 15. AssumeBuilderPass

----------------------------------------
define i32 @test2(ptr %arg, ptr %arg1, ptr %arg2) {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 8
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  %i19 = load i8, ptr %i18, align 4
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
=>
define i32 @test2(ptr %arg, ptr %arg1, ptr %arg2) {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 8
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  assume_dereferenceable ptr %i17, i64 5
  assume_nonnull ptr %i17
  assume_align ptr %i17, i64 4
  %i19 = load i8, ptr %i18, align 4
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  assume_dereferenceable ptr %i22, i64 16
  assume_nonnull ptr %i22
  assume_align ptr %i22, i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
Transformation seems to be correct!

-- 16. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 17. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 18. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 19. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 20. AssumeSimplifyPass

----------------------------------------
define i32 @test2(ptr %arg, ptr %arg1, ptr %arg2) {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 8
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  assume_dereferenceable ptr %i17, i64 5
  assume_nonnull ptr %i17
  assume_align ptr %i17, i64 4
  assume i1 1
  %i19 = load i8, ptr %i18, align 4
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  assume_dereferenceable ptr %i22, i64 16
  assume_nonnull ptr %i22
  assume_align ptr %i22, i64 8
  assume i1 1
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
Transformation seems to be correct! (syntactically equal)

-- 21. AssumeSimplifyPass

----------------------------------------
define i32 @test2(ptr %arg, ptr %arg1, ptr %arg2) {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 8
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  assume_dereferenceable ptr %i17, i64 5
  assume_nonnull ptr %i17
  assume_align ptr %i17, i64 4
  %i19 = load i8, ptr %i18, align 4
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  assume_dereferenceable ptr %i22, i64 16
  assume_nonnull ptr %i22
  assume_align ptr %i22, i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
=>
define i32 @test2(ptr %arg, ptr %arg1, ptr %arg2) {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 8
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  %i19 = load i8, ptr %i18, align 4
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  assume_dereferenceable ptr %i17, i64 5
  assume_nonnull ptr %i17
  assume_align ptr %i17, i64 4
  assume_dereferenceable ptr %i22, i64 16
  assume_nonnull ptr %i22
  assume_align ptr %i22, i64 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
Transformation seems to be correct!

-- 22. VerifierPass : Skipping NOP
-- 23. VerifierPass : Skipping NOP
-- 24. PassManager<Function> : Skipping NOP
-- 25. PassManager<Function> : Skipping NOP
-- 26. AssumeBuilderPass

----------------------------------------
declare void @may_throw()

define i32 @test3(ptr %arg, ptr %arg1, ptr %arg2) null_pointer_is_valid {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 32
  call void @may_throw()
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  %i19 = load i8, ptr %i18, align 8
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
Transformation seems to be correct! (syntactically equal)

-- 27. AssumeBuilderPass

----------------------------------------
declare void @may_throw()

define i32 @test3(ptr %arg, ptr %arg1, ptr %arg2) null_pointer_is_valid {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 32
  call void @may_throw()
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  %i19 = load i8, ptr %i18, align 8
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
=>
declare void @may_throw()

define i32 @test3(ptr %arg, ptr %arg1, ptr %arg2) null_pointer_is_valid {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 32
  call void @may_throw()
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  assume_dereferenceable ptr %i17, i64 5
  assume_align ptr %i17, i64 4
  %i19 = load i8, ptr %i18, align 8
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  assume_dereferenceable ptr %i22, i64 16
  assume_align ptr %i22, i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}

****************************************
WARNING: Source function is always UB.
It can be refined by any target function.
Please make sure this is what you wanted.
****************************************

Transformation seems to be correct!

-- 28. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 29. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 30. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 31. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 32. AssumeSimplifyPass

----------------------------------------
declare void @may_throw()

define i32 @test3(ptr %arg, ptr %arg1, ptr %arg2) null_pointer_is_valid {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 32
  call void @may_throw()
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  assume_dereferenceable ptr %i17, i64 5
  assume_align ptr %i17, i64 4
  assume i1 1
  %i19 = load i8, ptr %i18, align 8
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  assume_dereferenceable ptr %i22, i64 16
  assume_align ptr %i22, i64 8
  assume i1 1
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
Transformation seems to be correct! (syntactically equal)

-- 33. AssumeSimplifyPass

----------------------------------------
declare void @may_throw()

define i32 @test3(ptr %arg, ptr %arg1, ptr %arg2) null_pointer_is_valid {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 32
  call void @may_throw()
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  assume_dereferenceable ptr %i17, i64 5
  assume_align ptr %i17, i64 4
  %i19 = load i8, ptr %i18, align 8
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  assume_dereferenceable ptr %i22, i64 16
  assume_align ptr %i22, i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}
=>
declare void @may_throw()

define i32 @test3(ptr %arg, ptr %arg1, ptr %arg2) null_pointer_is_valid {
bb:
  %i = alloca i64 8, align 8
  %i3 = alloca i64 8, align 8
  %i4 = alloca i64 8, align 8
  %i5 = alloca i64 16, align 8
  store ptr %arg, ptr %i, align 8
  store ptr %arg1, ptr %i3, align 8
  store ptr %arg2, ptr %i4, align 8
  %i6 = load ptr, ptr %i3, align 8
  %i7 = load i32, ptr %i6, align 4
  %i8 = trunc i32 %i7 to i8
  %i9 = load ptr, ptr %i4, align 8
  store i8 %i8, ptr %i9, align 1
  %i11 = load ptr, ptr %i, align 32
  call void @may_throw()
  %i14 = load ptr, ptr %i, align 8
  %i16 = load i32, ptr %i14, align 8
  %i17 = load ptr, ptr %i, align 8
  %i18 = gep inbounds ptr %i17, 16 x i32 0, 1 x i64 4
  %i19 = load i8, ptr %i18, align 8
  %i20 = sext i8 %i19 to i32
  %i21 = add nsw i32 %i16, %i20
  %i22 = load ptr, ptr %i, align 8
  assume_dereferenceable ptr %i17, i64 5
  assume_align ptr %i17, i64 4
  assume_dereferenceable ptr %i22, i64 16
  assume_align ptr %i22, i64 8
  %i23 = gep inbounds ptr %i22, 16 x i32 0, 1 x i64 8
  %i24 = load ptr, ptr %i23, align 8
  %i25 = load i32, ptr %i24, align 4
  %i26 = add nsw i32 %i21, %i25
  ret i32 %i26
}

****************************************
WARNING: Source function is always UB.
It can be refined by any target function.
Please make sure this is what you wanted.
****************************************

Transformation seems to be correct!

-- 34. VerifierPass : Skipping NOP
-- 35. VerifierPass : Skipping NOP
-- 36. PassManager<Function> : Skipping NOP
-- 37. PassManager<Function> : Skipping NOP
-- 38. AssumeBuilderPass

----------------------------------------
define i32 @_Z6squarePi(ptr %P, ptr %P1, i1 %cond) {
bb:
  store i32 0, ptr %P, align 4
  store i32 0, ptr %P1, align 8
  br i1 %cond, label %A, label %B

A:
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 4
  br i1 %cond, label %C, label %B

B:
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 8
  br label %C

C:
  store i32 0, ptr %P, align 32
  store i32 0, ptr %P1, align 4
  ret i32 0
}
Transformation seems to be correct! (syntactically equal)

-- 39. AssumeBuilderPass

----------------------------------------
define i32 @_Z6squarePi(ptr %P, ptr %P1, i1 %cond) {
bb:
  store i32 0, ptr %P, align 4
  store i32 0, ptr %P1, align 8
  br i1 %cond, label %A, label %B

A:
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 4
  br i1 %cond, label %C, label %B

B:
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 8
  br label %C

C:
  store i32 0, ptr %P, align 32
  store i32 0, ptr %P1, align 4
  ret i32 0
}
=>
define i32 @_Z6squarePi(ptr %P, ptr %P1, i1 %cond) {
bb:
  assume_dereferenceable ptr %P, i64 4
  assume_nonnull ptr %P
  assume_align ptr %P, i64 4
  store i32 0, ptr %P, align 4
  assume_dereferenceable ptr %P1, i64 4
  assume_nonnull ptr %P1
  assume_align ptr %P1, i64 8
  store i32 0, ptr %P1, align 8
  br i1 %cond, label %A, label %B

A:
  assume_align ptr %P, i64 8
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 4
  br i1 %cond, label %C, label %B

B:
  assume_align ptr %P, i64 8
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 8
  br label %C

C:
  assume_align ptr %P, i64 32
  store i32 0, ptr %P, align 32
  store i32 0, ptr %P1, align 4
  ret i32 0
}
Transformation seems to be correct!

-- 40. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 41. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 42. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 43. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 44. AssumeSimplifyPass

----------------------------------------
define i32 @_Z6squarePi(ptr %P, ptr %P1, i1 %cond) {
bb:
  assume_dereferenceable ptr %P, i64 4
  assume_nonnull ptr %P
  assume_align ptr %P, i64 4
  assume i1 1
  store i32 0, ptr %P, align 4
  assume_dereferenceable ptr %P1, i64 4
  assume_nonnull ptr %P1
  assume_align ptr %P1, i64 8
  assume i1 1
  store i32 0, ptr %P1, align 8
  br i1 %cond, label %A, label %B

A:
  assume_align ptr %P, i64 8
  assume i1 1
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 4
  br i1 %cond, label %C, label %B

B:
  assume_align ptr %P, i64 8
  assume i1 1
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 8
  br label %C

C:
  assume_align ptr %P, i64 32
  assume i1 1
  store i32 0, ptr %P, align 32
  store i32 0, ptr %P1, align 4
  ret i32 0
}
Transformation seems to be correct! (syntactically equal)

-- 45. AssumeSimplifyPass

----------------------------------------
define i32 @_Z6squarePi(ptr %P, ptr %P1, i1 %cond) {
bb:
  assume_dereferenceable ptr %P, i64 4
  assume_nonnull ptr %P
  assume_align ptr %P, i64 4
  store i32 0, ptr %P, align 4
  assume_dereferenceable ptr %P1, i64 4
  assume_nonnull ptr %P1
  assume_align ptr %P1, i64 8
  store i32 0, ptr %P1, align 8
  br i1 %cond, label %A, label %B

A:
  assume_align ptr %P, i64 8
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 4
  br i1 %cond, label %C, label %B

B:
  assume_align ptr %P, i64 8
  store i32 0, ptr %P, align 8
  store i32 0, ptr %P1, align 8
  br label %C

C:
  assume_align ptr %P, i64 32
  store i32 0, ptr %P, align 32
  store i32 0, ptr %P1, align 4
  ret i32 0
}
=>
define i32 @_Z6squarePi(ptr nonnull dereferenceable(4) align(4) %P, ptr nonnull dereferenceable(4) align(8) %P1, i1 %cond) {
bb:
  store i32 0, ptr nonnull dereferenceable(4) align(4) %P, align 4
  store i32 0, ptr nonnull dereferenceable(4) align(8) %P1, align 8
  br i1 %cond, label %A, label %B

A:
  assume_align ptr nonnull dereferenceable(4) align(4) %P, i64 8
  store i32 0, ptr nonnull dereferenceable(4) align(4) %P, align 8
  store i32 0, ptr nonnull dereferenceable(4) align(8) %P1, align 8
  br i1 %cond, label %C, label %B

B:
  assume_align ptr nonnull dereferenceable(4) align(4) %P, i64 8
  store i32 0, ptr nonnull dereferenceable(4) align(4) %P, align 8
  store i32 0, ptr nonnull dereferenceable(4) align(8) %P1, align 8
  br label %C

C:
  assume_align ptr nonnull dereferenceable(4) align(4) %P, i64 32
  store i32 0, ptr nonnull dereferenceable(4) align(4) %P, align 32
  store i32 0, ptr nonnull dereferenceable(4) align(8) %P1, align 8
  ret i32 0
}
Transformation seems to be correct!

-- 46. VerifierPass : Skipping NOP
-- 47. VerifierPass : Skipping NOP
-- 48. PassManager<Function> : Skipping NOP
-- 49. PassManager<Function> : Skipping NOP
-- 50. AssumeBuilderPass

----------------------------------------
declare void @may_throw()

define i32 @test4A(ptr %arg, ptr %arg1, i32 %arg2, i32 %arg3) {
bb:
  %i = icmp ne ptr %arg1, null
  br i1 %i, label %bb4, label %bb10

bb4:
  %i5 = add nsw i32 %arg3, %arg2
  call void @may_throw()
  %i6 = load i32, ptr %arg, align 4
  %i7 = add nsw i32 %i5, %i6
  store i32 0, ptr %arg, align 4
  %i8 = load i32, ptr %arg1, align 4
  %i9 = add nsw i32 %i7, %i8
  call void @may_throw()
  store i32 %i9, ptr %arg1, align 4
  br label %bb10

bb10:
  ret i32 0
}
Transformation seems to be correct! (syntactically equal)

-- 51. AssumeBuilderPass

----------------------------------------
declare void @may_throw()

define i32 @test4A(ptr %arg, ptr %arg1, i32 %arg2, i32 %arg3) {
bb:
  %i = icmp ne ptr %arg1, null
  br i1 %i, label %bb4, label %bb10

bb4:
  %i5 = add nsw i32 %arg3, %arg2
  call void @may_throw()
  %i6 = load i32, ptr %arg, align 4
  %i7 = add nsw i32 %i5, %i6
  store i32 0, ptr %arg, align 4
  %i8 = load i32, ptr %arg1, align 4
  %i9 = add nsw i32 %i7, %i8
  call void @may_throw()
  store i32 %i9, ptr %arg1, align 4
  br label %bb10

bb10:
  ret i32 0
}
=>
declare void @may_throw()

define i32 @test4A(ptr %arg, ptr %arg1, i32 %arg2, i32 %arg3) {
bb:
  %i = icmp ne ptr %arg1, null
  br i1 %i, label %bb4, label %bb10

bb4:
  %i5 = add nsw i32 %arg3, %arg2
  call void @may_throw()
  assume_dereferenceable ptr %arg, i64 4
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  %i6 = load i32, ptr %arg, align 4
  %i7 = add nsw i32 %i5, %i6
  store i32 0, ptr %arg, align 4
  assume_dereferenceable ptr %arg1, i64 4
  assume_nonnull ptr %arg1
  assume_align ptr %arg1, i64 4
  %i8 = load i32, ptr %arg1, align 4
  %i9 = add nsw i32 %i7, %i8
  call void @may_throw()
  store i32 %i9, ptr %arg1, align 4
  br label %bb10

bb10:
  ret i32 0
}
Transformation doesn't verify! (not unsound)
ERROR: Timeout
-- 52. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 53. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 54. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 55. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 56. AssumeSimplifyPass

----------------------------------------
declare void @may_throw()

define i32 @test4A(ptr %arg, ptr %arg1, i32 %arg2, i32 %arg3) {
bb:
  %i = icmp ne ptr %arg1, null
  br i1 %i, label %bb4, label %bb10

bb4:
  %i5 = add nsw i32 %arg3, %arg2
  call void @may_throw()
  assume_dereferenceable ptr %arg, i64 4
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  assume i1 1
  %i6 = load i32, ptr %arg, align 4
  %i7 = add nsw i32 %i5, %i6
  store i32 0, ptr %arg, align 4
  assume_dereferenceable ptr %arg1, i64 4
  assume_nonnull ptr %arg1
  assume_align ptr %arg1, i64 4
  assume i1 1
  %i8 = load i32, ptr %arg1, align 4
  %i9 = add nsw i32 %i7, %i8
  call void @may_throw()
  store i32 %i9, ptr %arg1, align 4
  br label %bb10

bb10:
  ret i32 0
}
Transformation seems to be correct! (syntactically equal)

-- 57. AssumeSimplifyPass

----------------------------------------
declare void @may_throw()

define i32 @test4A(ptr %arg, ptr %arg1, i32 %arg2, i32 %arg3) {
bb:
  %i = icmp ne ptr %arg1, null
  br i1 %i, label %bb4, label %bb10

bb4:
  %i5 = add nsw i32 %arg3, %arg2
  call void @may_throw()
  assume_dereferenceable ptr %arg, i64 4
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  %i6 = load i32, ptr %arg, align 4
  %i7 = add nsw i32 %i5, %i6
  store i32 0, ptr %arg, align 4
  assume_dereferenceable ptr %arg1, i64 4
  assume_nonnull ptr %arg1
  assume_align ptr %arg1, i64 4
  %i8 = load i32, ptr %arg1, align 4
  %i9 = add nsw i32 %i7, %i8
  call void @may_throw()
  store i32 %i9, ptr %arg1, align 4
  br label %bb10

bb10:
  ret i32 0
}
=>
declare void @may_throw()

define i32 @test4A(ptr %arg, ptr %arg1, i32 %arg2, i32 %arg3) {
bb:
  %i = icmp ne ptr %arg1, null
  br i1 %i, label %bb4, label %bb10

bb4:
  %i5 = add nsw i32 %arg3, %arg2
  call void @may_throw()
  assume_dereferenceable ptr %arg, i64 4
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  assume_dereferenceable ptr %arg1, i64 4
  assume_nonnull ptr %arg1
  assume_align ptr %arg1, i64 4
  %i6 = load i32, ptr %arg, align 4
  %i7 = add nsw i32 %i5, %i6
  store i32 0, ptr %arg, align 4
  %i8 = load i32, ptr %arg1, align 4
  %i9 = add nsw i32 %i7, %i8
  call void @may_throw()
  store i32 %i9, ptr %arg1, align 4
  br label %bb10

bb10:
  ret i32 0
}
Transformation doesn't verify! (not unsound)
ERROR: Timeout
-- 58. VerifierPass : Skipping NOP
-- 59. VerifierPass : Skipping NOP
-- 60. PassManager<Function> : Skipping NOP
-- 61. PassManager<Function> : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 62. AssumeBuilderPass
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 63. AssumeBuilderPass
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 64. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 65. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 66. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 67. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 68. AssumeSimplifyPass
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 69. AssumeSimplifyPass
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 70. VerifierPass : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 71. VerifierPass : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 72. PassManager<Function> : Skipping NOP
ERROR: Unsupported instruction:   invoke void @may_throwv2(ptr nonnull %P)
          to label %Exit unwind label
-- 73. PassManager<Function> : Skipping NOP
-- 74. AssumeBuilderPass

----------------------------------------
define i32 @test5(ptr %arg, i32 %arg1) {
bb:
  %i3 = sext i32 %arg1 to i64
  %i4 = gep inbounds ptr %arg, 2 x i64 %i3
  %i5 = load i16, ptr %i4, align 2
  %A = load i16, ptr %i4, align 4
  %i6 = sext i16 %i5 to i64
  %i7 = gep inbounds ptr %arg, 8 x i64 %i6
  %i8 = load i64, ptr %i7, align 16
  %B = load i64, ptr %i7, align 32
  %i9 = trunc i64 %i8 to i32
  ret i32 %i9
}
Transformation seems to be correct! (syntactically equal)

-- 75. AssumeBuilderPass

----------------------------------------
define i32 @test5(ptr %arg, i32 %arg1) {
bb:
  %i3 = sext i32 %arg1 to i64
  %i4 = gep inbounds ptr %arg, 2 x i64 %i3
  %i5 = load i16, ptr %i4, align 2
  %A = load i16, ptr %i4, align 4
  %i6 = sext i16 %i5 to i64
  %i7 = gep inbounds ptr %arg, 8 x i64 %i6
  %i8 = load i64, ptr %i7, align 16
  %B = load i64, ptr %i7, align 32
  %i9 = trunc i64 %i8 to i32
  ret i32 %i9
}
=>
define i32 @test5(ptr %arg, i32 %arg1) {
bb:
  %i3 = sext i32 %arg1 to i64
  %i4 = gep inbounds ptr %arg, 2 x i64 %i3
  assume_dereferenceable ptr %i4, i64 2
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 8
  %i5 = load i16, ptr %i4, align 2
  %A = load i16, ptr %i4, align 4
  %i6 = sext i16 %i5 to i64
  %i7 = gep inbounds ptr %arg, 8 x i64 %i6
  assume_dereferenceable ptr %i7, i64 8
  %i8 = load i64, ptr %i7, align 16
  %B = load i64, ptr %i7, align 32
  %i9 = trunc i64 %i8 to i32
  ret i32 %i9
}
Transformation seems to be correct!

-- 76. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 77. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 78. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 79. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 80. AssumeSimplifyPass

----------------------------------------
define i32 @test5(ptr %arg, i32 %arg1) {
bb:
  %i3 = sext i32 %arg1 to i64
  %i4 = gep inbounds ptr %arg, 2 x i64 %i3
  assume_dereferenceable ptr %i4, i64 2
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 8
  assume i1 1
  %i5 = load i16, ptr %i4, align 2
  %A = load i16, ptr %i4, align 4
  %i6 = sext i16 %i5 to i64
  %i7 = gep inbounds ptr %arg, 8 x i64 %i6
  assume_dereferenceable ptr %i7, i64 8
  assume i1 1
  %i8 = load i64, ptr %i7, align 16
  %B = load i64, ptr %i7, align 32
  %i9 = trunc i64 %i8 to i32
  ret i32 %i9
}
Transformation seems to be correct! (syntactically equal)

-- 81. AssumeSimplifyPass

----------------------------------------
define i32 @test5(ptr %arg, i32 %arg1) {
bb:
  %i3 = sext i32 %arg1 to i64
  %i4 = gep inbounds ptr %arg, 2 x i64 %i3
  assume_dereferenceable ptr %i4, i64 2
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 8
  %i5 = load i16, ptr %i4, align 2
  %A = load i16, ptr %i4, align 4
  %i6 = sext i16 %i5 to i64
  %i7 = gep inbounds ptr %arg, 8 x i64 %i6
  assume_dereferenceable ptr %i7, i64 8
  %i8 = load i64, ptr %i7, align 16
  %B = load i64, ptr %i7, align 32
  %i9 = trunc i64 %i8 to i32
  ret i32 %i9
}
=>
define i32 @test5(ptr nonnull align(8) %arg, i32 %arg1) {
bb:
  %i3 = sext i32 %arg1 to i64
  %i4 = gep inbounds ptr nonnull align(8) %arg, 2 x i64 %i3
  %i5 = load i16, ptr %i4, align 2
  %A = load i16, ptr %i4, align 4
  %i6 = sext i16 %i5 to i64
  %i7 = gep inbounds ptr nonnull align(8) %arg, 8 x i64 %i6
  assume_dereferenceable ptr %i4, i64 2
  assume_dereferenceable ptr %i7, i64 8
  %i8 = load i64, ptr %i7, align 16
  %B = load i64, ptr %i7, align 32
  %i9 = trunc i64 %i8 to i32
  ret i32 %i9
}
Transformation seems to be correct!

-- 82. VerifierPass : Skipping NOP
-- 83. VerifierPass : Skipping NOP
-- 84. PassManager<Function> : Skipping NOP
-- 85. PassManager<Function> : Skipping NOP
-- 86. AssumeBuilderPass

----------------------------------------
define i32 @test6(ptr %arg, i32 %arg1, ptr %arg2) {
bb:
  br label %bb3

bb3:
  %.0 = phi i32 [ 0, %bb ], [ %i14, %bb4 ]
  %i = icmp slt i32 %.0, %arg1
  br i1 %i, label %bb4, label %bb15

bb4:
  %i5 = add nsw i32 %arg1, %.0
  %i6 = sext i32 %i5 to i64
  %i7 = gep inbounds ptr %arg, 4 x i64 %i6
  %i8 = load i32, ptr %i7, align 4
  %i9 = mul nsw i32 %.0, %i8
  %i10 = sext i32 %.0 to i64
  %i11 = gep inbounds ptr %arg, 4 x i64 %i10
  %i12 = load i32, ptr %i11, align 4
  %i13 = add nsw i32 %i12, %i9
  store i32 %i13, ptr %i11, align 4
  %i14 = add nsw i32 %.0, 1
  br label %bb3

bb15:
  %i16 = sext i32 %arg1 to i64
  %i17 = gep inbounds ptr %arg2, 4 x i64 %i16
  %i18 = load i32, ptr %i17, align 4
  ret i32 %i18
}
Transformation seems to be correct! (syntactically equal)

-- 87. AssumeBuilderPass

----------------------------------------
define i32 @test6(ptr %arg, i32 %arg1, ptr %arg2) {
bb:
  br label %bb3

bb3:
  %.0 = phi i32 [ 0, %bb ], [ %i14, %bb4 ]
  %i = icmp slt i32 %.0, %arg1
  br i1 %i, label %bb4, label %bb15

bb4:
  %i5 = add nsw i32 %arg1, %.0
  %i6 = sext i32 %i5 to i64
  %i7 = gep inbounds ptr %arg, 4 x i64 %i6
  %i8 = load i32, ptr %i7, align 4
  %i9 = mul nsw i32 %.0, %i8
  %i10 = sext i32 %.0 to i64
  %i11 = gep inbounds ptr %arg, 4 x i64 %i10
  %i12 = load i32, ptr %i11, align 4
  %i13 = add nsw i32 %i12, %i9
  store i32 %i13, ptr %i11, align 4
  %i14 = add nsw i32 %.0, 1
  br label %bb3

bb15:
  %i16 = sext i32 %arg1 to i64
  %i17 = gep inbounds ptr %arg2, 4 x i64 %i16
  %i18 = load i32, ptr %i17, align 4
  ret i32 %i18
}
=>
define i32 @test6(ptr %arg, i32 %arg1, ptr %arg2) {
bb:
  br label %bb3

bb3:
  %.0 = phi i32 [ 0, %bb ], [ %i14, %bb4 ]
  %i = icmp slt i32 %.0, %arg1
  br i1 %i, label %bb4, label %bb15

bb4:
  %i5 = add nsw i32 %arg1, %.0
  %i6 = sext i32 %i5 to i64
  %i7 = gep inbounds ptr %arg, 4 x i64 %i6
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  %i8 = load i32, ptr %i7, align 4
  %i9 = mul nsw i32 %.0, %i8
  %i10 = sext i32 %.0 to i64
  %i11 = gep inbounds ptr %arg, 4 x i64 %i10
  assume_dereferenceable ptr %i11, i64 4
  %i12 = load i32, ptr %i11, align 4
  %i13 = add nsw i32 %i12, %i9
  store i32 %i13, ptr %i11, align 4
  %i14 = add nsw i32 %.0, 1
  br label %bb3

bb15:
  %i16 = sext i32 %arg1 to i64
  %i17 = gep inbounds ptr %arg2, 4 x i64 %i16
  assume_nonnull ptr %arg2
  assume_align ptr %arg2, i64 4
  %i18 = load i32, ptr %i17, align 4
  ret i32 %i18
}
Transformation seems to be correct!

-- 88. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 89. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 90. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 91. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 92. AssumeSimplifyPass

----------------------------------------
define i32 @test6(ptr %arg, i32 %arg1, ptr %arg2) {
bb:
  br label %bb3

bb3:
  %.0 = phi i32 [ 0, %bb ], [ %i14, %bb4 ]
  %i = icmp slt i32 %.0, %arg1
  br i1 %i, label %bb4, label %bb15

bb4:
  %i5 = add nsw i32 %arg1, %.0
  %i6 = sext i32 %i5 to i64
  %i7 = gep inbounds ptr %arg, 4 x i64 %i6
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  assume i1 1
  %i8 = load i32, ptr %i7, align 4
  %i9 = mul nsw i32 %.0, %i8
  %i10 = sext i32 %.0 to i64
  %i11 = gep inbounds ptr %arg, 4 x i64 %i10
  assume_dereferenceable ptr %i11, i64 4
  assume i1 1
  %i12 = load i32, ptr %i11, align 4
  %i13 = add nsw i32 %i12, %i9
  store i32 %i13, ptr %i11, align 4
  %i14 = add nsw i32 %.0, 1
  br label %bb3

bb15:
  %i16 = sext i32 %arg1 to i64
  %i17 = gep inbounds ptr %arg2, 4 x i64 %i16
  assume_nonnull ptr %arg2
  assume_align ptr %arg2, i64 4
  assume i1 1
  %i18 = load i32, ptr %i17, align 4
  ret i32 %i18
}
Transformation seems to be correct! (syntactically equal)

-- 93. AssumeSimplifyPass

----------------------------------------
define i32 @test6(ptr %arg, i32 %arg1, ptr %arg2) {
bb:
  br label %bb3

bb3:
  %.0 = phi i32 [ 0, %bb ], [ %i14, %bb4 ]
  %i = icmp slt i32 %.0, %arg1
  br i1 %i, label %bb4, label %bb15

bb4:
  %i5 = add nsw i32 %arg1, %.0
  %i6 = sext i32 %i5 to i64
  %i7 = gep inbounds ptr %arg, 4 x i64 %i6
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  %i8 = load i32, ptr %i7, align 4
  %i9 = mul nsw i32 %.0, %i8
  %i10 = sext i32 %.0 to i64
  %i11 = gep inbounds ptr %arg, 4 x i64 %i10
  assume_dereferenceable ptr %i11, i64 4
  %i12 = load i32, ptr %i11, align 4
  %i13 = add nsw i32 %i12, %i9
  store i32 %i13, ptr %i11, align 4
  %i14 = add nsw i32 %.0, 1
  br label %bb3

bb15:
  %i16 = sext i32 %arg1 to i64
  %i17 = gep inbounds ptr %arg2, 4 x i64 %i16
  assume_nonnull ptr %arg2
  assume_align ptr %arg2, i64 4
  %i18 = load i32, ptr %i17, align 4
  ret i32 %i18
}
=>
define i32 @test6(ptr %arg, i32 %arg1, ptr %arg2) {
bb:
  br label %bb3

bb3:
  %.0 = phi i32 [ 0, %bb ], [ %i14, %bb4 ]
  %i = icmp slt i32 %.0, %arg1
  br i1 %i, label %bb4, label %bb15

bb4:
  %i5 = add nsw i32 %arg1, %.0
  %i6 = sext i32 %i5 to i64
  %i7 = gep inbounds ptr %arg, 4 x i64 %i6
  %i8 = load i32, ptr %i7, align 4
  %i9 = mul nsw i32 %.0, %i8
  %i10 = sext i32 %.0 to i64
  %i11 = gep inbounds ptr %arg, 4 x i64 %i10
  assume_nonnull ptr %arg
  assume_align ptr %arg, i64 4
  assume_dereferenceable ptr %i11, i64 4
  %i12 = load i32, ptr %i11, align 4
  %i13 = add nsw i32 %i12, %i9
  store i32 %i13, ptr %i11, align 4
  %i14 = add nsw i32 %.0, 1
  br label %bb3

bb15:
  %i16 = sext i32 %arg1 to i64
  %i17 = gep inbounds ptr %arg2, 4 x i64 %i16
  assume_nonnull ptr %arg2
  assume_align ptr %arg2, i64 4
  %i18 = load i32, ptr %i17, align 4
  ret i32 %i18
}
Transformation seems to be correct!

-- 94. VerifierPass : Skipping NOP
-- 95. VerifierPass : Skipping NOP
-- 96. PassManager<Function> : Skipping NOP
-- 97. PassManager<Function> : Skipping NOP
-- 98. AssumeBuilderPass

----------------------------------------
define i32 @test7(ptr nonnull %arg, i32 %arg1) {
bb:
  %i = sext i32 %arg1 to i64
  %i2 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 272
  %i3 = load i64, ptr %i2, align 8
  %i4 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 16, 64 x i64 %i, 16 x i64 %i3, 1 x i64 0
  %i5 = load i64, ptr %i4, align 32
  %i6 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 8
  %i7 = load ptr, ptr %i6, align 8
  %i8 = gep inbounds ptr %i7, 8 x i64 %i3
  store i64 %i5, ptr %i8, align 8
  store i64 %i5, ptr %i8, align 8
  %i10 = load ptr, ptr nonnull %arg, align 8
  %i11 = load i32, ptr %i10, align 4
  ret i32 %i11
}
Transformation seems to be correct! (syntactically equal)

-- 99. AssumeBuilderPass

----------------------------------------
define i32 @test7(ptr nonnull %arg, i32 %arg1) {
bb:
  %i = sext i32 %arg1 to i64
  %i2 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 272
  %i3 = load i64, ptr %i2, align 8
  %i4 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 16, 64 x i64 %i, 16 x i64 %i3, 1 x i64 0
  %i5 = load i64, ptr %i4, align 32
  %i6 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 8
  %i7 = load ptr, ptr %i6, align 8
  %i8 = gep inbounds ptr %i7, 8 x i64 %i3
  store i64 %i5, ptr %i8, align 8
  store i64 %i5, ptr %i8, align 8
  %i10 = load ptr, ptr nonnull %arg, align 8
  %i11 = load i32, ptr %i10, align 4
  ret i32 %i11
}
=>
define i32 @test7(ptr nonnull %arg, i32 %arg1) {
bb:
  %i = sext i32 %arg1 to i64
  %i2 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 272
  assume_dereferenceable ptr nonnull %arg, i64 280
  assume_align ptr nonnull %arg, i64 16
  %i3 = load i64, ptr %i2, align 8
  %i4 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 16, 64 x i64 %i, 16 x i64 %i3, 1 x i64 0
  %i5 = load i64, ptr %i4, align 32
  %i6 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 8
  %i7 = load ptr, ptr %i6, align 8
  %i8 = gep inbounds ptr %i7, 8 x i64 %i3
  assume_dereferenceable ptr %i8, i64 8
  assume_nonnull ptr %i7
  assume_align ptr %i7, i64 8
  store i64 %i5, ptr %i8, align 8
  store i64 %i5, ptr %i8, align 8
  %i10 = load ptr, ptr nonnull %arg, align 8
  %i11 = load i32, ptr %i10, align 4
  ret i32 %i11
}
Transformation seems to be correct!

-- 100. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 101. RequireAnalysisPass<DominatorTreeAnalysis, Function> : Skipping NOP
-- 102. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 103. RequireAnalysisPass<AssumptionAnalysis, Function> : Skipping NOP
-- 104. AssumeSimplifyPass

----------------------------------------
define i32 @test7(ptr nonnull %arg, i32 %arg1) {
bb:
  %i = sext i32 %arg1 to i64
  %i2 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 272
  assume_dereferenceable ptr nonnull %arg, i64 280
  assume_align ptr nonnull %arg, i64 16
  assume i1 1
  %i3 = load i64, ptr %i2, align 8
  %i4 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 16, 64 x i64 %i, 16 x i64 %i3, 1 x i64 0
  %i5 = load i64, ptr %i4, align 32
  %i6 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 8
  %i7 = load ptr, ptr %i6, align 8
  %i8 = gep inbounds ptr %i7, 8 x i64 %i3
  assume_dereferenceable ptr %i8, i64 8
  assume_nonnull ptr %i7
  assume_align ptr %i7, i64 8
  assume i1 1
  store i64 %i5, ptr %i8, align 8
  store i64 %i5, ptr %i8, align 8
  %i10 = load ptr, ptr nonnull %arg, align 8
  %i11 = load i32, ptr %i10, align 4
  ret i32 %i11
}
Transformation seems to be correct! (syntactically equal)

-- 105. AssumeSimplifyPass

----------------------------------------
define i32 @test7(ptr nonnull %arg, i32 %arg1) {
bb:
  %i = sext i32 %arg1 to i64
  %i2 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 272
  assume_dereferenceable ptr nonnull %arg, i64 280
  assume_align ptr nonnull %arg, i64 16
  %i3 = load i64, ptr %i2, align 8
  %i4 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 16, 64 x i64 %i, 16 x i64 %i3, 1 x i64 0
  %i5 = load i64, ptr %i4, align 32
  %i6 = gep inbounds ptr nonnull %arg, 280 x i64 0, 1 x i64 8
  %i7 = load ptr, ptr %i6, align 8
  %i8 = gep inbounds ptr %i7, 8 x i64 %i3
  assume_dereferenceable ptr %i8, i64 8
  assume_nonnull ptr %i7
  assume_align ptr %i7, i64 8
  store i64 %i5, ptr %i8, align 8
  store i64 %i5, ptr %i8, align 8
  %i10 = load ptr, ptr nonnull %arg, align 8
  %i11 = load i32, ptr %i10, align 4
  ret i32 %i11
}
=>
define i32 @test7(ptr nonnull dereferenceable(280) align(16) %arg, i32 %arg1) {
bb:
  %i = sext i32 %arg1 to i64
  %i2 = gep inbounds ptr nonnull dereferenceable(280) align(16) %arg, 280 x i64 0, 1 x i64 272
  %i3 = load i64, ptr %i2, align 16
  %i4 = gep inbounds ptr nonnull dereferenceable(280) align(16) %arg, 280 x i64 0, 1 x i64 16, 64 x i64 %i, 16 x i64 %i3, 1 x i64 0
  %i5 = load i64, ptr %i4, align 32
  %i6 = gep inbounds ptr nonnull dereferenceable(280) align(16) %arg, 280 x i64 0, 1 x i64 8
  %i7 = load ptr, ptr %i6, align 8
  %i8 = gep inbounds ptr %i7, 8 x i64 %i3
  assume_dereferenceable ptr %i8, i64 8
  assume_nonnull ptr %i7
  assume_align ptr %i7, i64 8
  store i64 %i5, ptr %i8, align 8
  store i64 %i5, ptr %i8, align 8
  %i10 = load ptr, ptr nonnull dereferenceable(280) align(16) %arg, align 16
  %i11 = load i32, ptr %i10, align 4
  ret i32 %i11
}
Transformation doesn't verify! (unsound)
ERROR: Source is more defined than target

Example:
ptr nonnull %arg = pointer(non-local, block_id=1, offset=0) / Address=#x0000000000000010
i32 %arg1 = #x00000000 (0)

Source:
i64 %i = #x0000000000000000 (0)
ptr %i2 = pointer(non-local, block_id=1, offset=272) / Address=#x0000000000000120
i64 %i3 = #x0000000000000004 (4)
ptr %i4 = pointer(non-local, block_id=1, offset=80) / Address=#x0000000000000060
i64 %i5 = #x0000000000000000 (0)
ptr %i6 = pointer(non-local, block_id=1, offset=8) / Address=#x0000000000000018
ptr %i7 = pointer(non-local, block_id=1, offset=192) / Address=#x00000000000000d0
ptr %i8 = pointer(non-local, block_id=1, offset=224) / Address=#x00000000000000f0
ptr %i10 = pointer(non-local, block_id=1, offset=88) / Address=#x0000000000000068
i32 %i11 = poison

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 0	align: 4	alloc type: 0	alive: false	address: 0
Block 1 >	size: 281	align: 4	alloc type: 0	alive: true	address: 16
Contents:
1: pointer(non-local, block_id=1, offset=88), byte offset=1
2: pointer(non-local, block_id=1, offset=192), byte offset=0
3: pointer(non-local, block_id=1, offset=192), byte offset=1
0: pointer(non-local, block_id=1, offset=88), byte offset=0
21: #x00000000
69: #x00000000
20: #x00000000
68: #x00000004
*: poison

Block 2 >	size: 0	align: 8	alloc type: 0	alive: true	address: 8
Block 3 >	size: 0	align: 1	alloc type: 0	alive: true	address: 1

Target:
i64 %i = UB triggered!


Pass: AssumeSimplifyPass
Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-passes=assume-builder,require<domtree>,require<assumptions>,assume-simplify,verify' '--enable-knowledge-retention' '-S' '/bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'
Wrote bitcode to: "/home/nlopes/alive2/build/logs/assume-builder_LOb3zIZD_4Hfp.bc"


------------------- SMT STATS -------------------
Num queries: 142
Num invalid: 0
Num skips:   0
Num trivial: 69 (32.7%)
Num timeout: 2 (1.4%)
Num errors:  0 (0.0%)
Num SAT:     94 (66.2%)
Num UNSAT:   46 (32.4%)
Alive2: Transform doesn't verify; aborting!

stderr:

/home/nlopes/alive2/build/opt-alive.sh -passes='assume-builder,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=BASIC # RUN: at line 2
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=BASIC
+ /home/nlopes/alive2/build/opt-alive.sh -passes=assume-builder,verify --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll
/home/nlopes/alive2/build/opt-alive.sh -passes='assume-builder,verify' --enable-knowledge-retention --assume-preserve-all -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=ALL # RUN: at line 3
+ /home/nlopes/alive2/build/opt-alive.sh -passes=assume-builder,verify --enable-knowledge-retention --assume-preserve-all -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=ALL
/home/nlopes/alive2/build/opt-alive.sh -passes='require<assumptions>,assume-builder,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=WITH-AC # RUN: at line 4
+ /home/nlopes/alive2/build/opt-alive.sh '-passes=require<assumptions>,assume-builder,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=WITH-AC
/home/nlopes/alive2/build/opt-alive.sh -passes='require<domtree>,require<assumptions>,assume-builder,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=CROSS-BLOCK # RUN: at line 5
+ /home/nlopes/alive2/build/opt-alive.sh '-passes=require<domtree>,require<assumptions>,assume-builder,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=CROSS-BLOCK
/home/nlopes/alive2/build/opt-alive.sh -passes='assume-builder,require<domtree>,require<assumptions>,assume-simplify,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=FULL-SIMPLIFY # RUN: at line 6
+ /home/nlopes/alive2/build/opt-alive.sh '-passes=assume-builder,require<domtree>,require<assumptions>,assume-simplify,verify' --enable-knowledge-retention -S /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=FULL-SIMPLIFY

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/Util/assume-builder.ll --check-prefixes=FULL-SIMPLIFY

 

<-- Back