Test source: git
Source: <stdin> ---------------------------------------- define i43 @demorgan_or_apint1(i43 %A, i43 %B) { %0: %NotA = xor i43 %A, 8796093022207 %NotB = xor i43 %B, 8796093022207 %C = or i43 %NotA, %NotB ret i43 %C } => define i43 @demorgan_or_apint1(i43 %A, i43 %B) { %0: %C.demorgan = and i43 %A, %B %C = xor i43 %C.demorgan, 8796093022207 ret i43 %C } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define i129 @demorgan_or_apint2(i129 %A, i129 %B) { %0: %NotA = xor i129 %A, 680564733841876926926749214863536422911 %NotB = xor i129 %B, 680564733841876926926749214863536422911 %C = or i129 %NotA, %NotB ret i129 %C } => define i129 @demorgan_or_apint2(i129 %A, i129 %B) { %0: %C.demorgan = and i129 %A, %B %C = xor i129 %C.demorgan, 680564733841876926926749214863536422911 ret i129 %C } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define i477 @demorgan_and_apint1(i477 %A, i477 %B) { %0: %NotA = xor i477 %A, 390218568789499028922699653724145788218574767833121393857394619953171467352470702515038262882936496394978366390175827861930996959911035663286271 %NotB = xor i477 %B, 390218568789499028922699653724145788218574767833121393857394619953171467352470702515038262882936496394978366390175827861930996959911035663286271 %C = and i477 %NotA, %NotB ret i477 %C } => define i477 @demorgan_and_apint1(i477 %A, i477 %B) { %0: %C.demorgan = or i477 %A, %B %C = xor i477 %C.demorgan, 390218568789499028922699653724145788218574767833121393857394619953171467352470702515038262882936496394978366390175827861930996959911035663286271 ret i477 %C } Transformation seems to be correct! ---------------------------------------- define i129 @demorgan_and_apint2(i129 %A, i129 %B) { %0: %NotA = xor i129 %A, 680564733841876926926749214863536422911 %NotB = xor i129 %B, 680564733841876926926749214863536422911 %C = and i129 %NotA, %NotB ret i129 %C } => define i129 @demorgan_and_apint2(i129 %A, i129 %B) { %0: %C.demorgan = or i129 %A, %B %C = xor i129 %C.demorgan, 680564733841876926926749214863536422911 ret i129 %C } Transformation seems to be correct! ---------------------------------------- define i65 @demorgan_and_apint3(i65 %A, i65 %B) { %0: %NotA = xor i65 %A, 36893488147419103231 %NotB = xor i65 36893488147419103231, %B %C = and i65 %NotA, %NotB ret i65 %C } => define i65 @demorgan_and_apint3(i65 %A, i65 %B) { %0: %C.demorgan = or i65 %A, %B %C = xor i65 %C.demorgan, 36893488147419103231 ret i65 %C } Transformation seems to be correct! ---------------------------------------- define i66 @demorgan_and_apint4(i66 %A, i66 %B) { %0: %NotA = xor i66 %A, 73786976294838206463 %NotB = xor i66 %B, 73786976294838206463 %C = and i66 %NotA, %NotB ret i66 %C } => define i66 @demorgan_and_apint4(i66 %A, i66 %B) { %0: %C.demorgan = or i66 %A, %B %C = xor i66 %C.demorgan, 73786976294838206463 ret i66 %C } Transformation seems to be correct! ---------------------------------------- define i47 @demorgan_and_apint5(i47 %A, i47 %B) { %0: %NotA = xor i47 %A, 140737488355327 %NotB = xor i47 %B, 140737488355327 %C = and i47 %NotA, %NotB ret i47 %C } => define i47 @demorgan_and_apint5(i47 %A, i47 %B) { %0: %C.demorgan = or i47 %A, %B %C = xor i47 %C.demorgan, 140737488355327 ret i47 %C } Transformation seems to be correct! ---------------------------------------- define i32 @test3(i32 %A, i32 %B) { %0: %nota = xor i32 %A, 4294967295 %notb = xor i32 %B, 4294967295 %c = and i32 %nota, %notb %notc = xor i32 %c, 4294967295 ret i32 %notc } => define i32 @test3(i32 %A, i32 %B) { %0: %c.demorgan = or i32 %A, %B ret i32 %c.demorgan } Transformation seems to be correct! ---------------------------------------- define i32 @test4(i32 %A) { %0: %nota = xor i32 %A, 4294967295 %c = and i32 %nota, 5 %notc = xor i32 %c, 4294967295 ret i32 %notc } => define i32 @test4(i32 %A) { %0: %notc1 = or i32 %A, 4294967290 ret i32 %notc1 } Transformation seems to be correct! ---------------------------------------- define i32 @test5(i32 %A, i32 %B) { %0: %nota = xor i32 %A, 4294967295 %notb = xor i32 %B, 4294967295 %c = or i32 %nota, %notb %notc = xor i32 %c, 4294967295 ret i32 %notc } => define i32 @test5(i32 %A, i32 %B) { %0: %c.demorgan = and i32 %A, %B ret i32 %c.demorgan } Transformation seems to be correct! ---------------------------------------- define i47 @test3_apint(i47 %A, i47 %B) { %0: %nota = xor i47 %A, 140737488355327 %notb = xor i47 %B, 140737488355327 %c = and i47 %nota, %notb %notc = xor i47 %c, 140737488355327 ret i47 %notc } => define i47 @test3_apint(i47 %A, i47 %B) { %0: %c.demorgan = or i47 %A, %B ret i47 %c.demorgan } Transformation seems to be correct! ---------------------------------------- define i61 @test4_apint(i61 %A) { %0: %nota = xor i61 %A, 2305843009213693951 %c = and i61 %nota, 5 %notc = xor i61 %c, 2305843009213693951 ret i61 %c } => define i61 @test4_apint(i61 %A) { %0: %nota = and i61 %A, 5 %c = xor i61 %nota, 5 ret i61 %c } Transformation seems to be correct! ---------------------------------------- define i71 @test5_apint(i71 %A, i71 %B) { %0: %nota = xor i71 %A, 2361183241434822606847 %notb = xor i71 %B, 2361183241434822606847 %c = or i71 %nota, %notb %notc = xor i71 %c, 2361183241434822606847 ret i71 %notc } => define i71 @test5_apint(i71 %A, i71 %B) { %0: %c.demorgan = and i71 %A, %B ret i71 %c.demorgan } Transformation seems to be correct! ---------------------------------------- define i8 @demorgan_nand(i8 %A, i8 %B) { %0: %notx = xor i8 %A, 255 %c = and i8 %notx, %B %notc = xor i8 %c, 255 ret i8 %notc } => define i8 @demorgan_nand(i8 %A, i8 %B) { %0: %B.not = xor i8 %B, 255 %notc = or i8 %B.not, %A ret i8 %notc } Transformation seems to be correct! ---------------------------------------- define i7 @demorgan_nand_apint1(i7 %A, i7 %B) { %0: %nota = xor i7 %A, 127 %c = and i7 %nota, %B %notc = xor i7 %c, 127 ret i7 %notc } => define i7 @demorgan_nand_apint1(i7 %A, i7 %B) { %0: %B.not = xor i7 %B, 127 %notc = or i7 %B.not, %A ret i7 %notc } Transformation seems to be correct! ---------------------------------------- define i117 @demorgan_nand_apint2(i117 %A, i117 %B) { %0: %nota = xor i117 %A, 166153499473114484112975882535043071 %c = and i117 %nota, %B %notc = xor i117 %c, 166153499473114484112975882535043071 ret i117 %notc } => define i117 @demorgan_nand_apint2(i117 %A, i117 %B) { %0: %B.not = xor i117 %B, 166153499473114484112975882535043071 %notc = or i117 %B.not, %A ret i117 %notc } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define i8 @demorgan_nor(i8 %A, i8 %B) { %0: %notx = xor i8 %A, 255 %c = or i8 %notx, %B %notc = xor i8 %c, 255 ret i8 %notc } => define i8 @demorgan_nor(i8 %A, i8 %B) { %0: %B.not = xor i8 %B, 255 %notc = and i8 %B.not, %A ret i8 %notc } Transformation seems to be correct! ---------------------------------------- define i8 @demorgan_nor_use2a(i8 %A, i8 %B) { %0: %nota = xor i8 %A, 255 %use2a = mul i8 %nota, 23 %c = or i8 %nota, %B %notc = xor i8 %c, 255 %r = sdiv i8 %notc, %use2a ret i8 %r } => define i8 @demorgan_nor_use2a(i8 %A, i8 %B) { %0: %nota = xor i8 %A, 255 %use2a = mul i8 %nota, 23 %B.not = xor i8 %B, 255 %notc = and i8 %B.not, %A %r = sdiv i8 %notc, %use2a ret i8 %r } Transformation seems to be correct! ---------------------------------------- define i8 @demorgan_nor_use2b(i8 %A, i8 %B) { %0: %use2b = mul i8 %B, 23 %nota = xor i8 %A, 255 %c = or i8 %nota, %B %notc = xor i8 %c, 255 %r = sdiv i8 %notc, %use2b ret i8 %r } => define i8 @demorgan_nor_use2b(i8 %A, i8 %B) { %0: %use2b = mul i8 %B, 23 %B.not = xor i8 %B, 255 %notc = and i8 %B.not, %A %r = sdiv i8 %notc, %use2b ret i8 %r } Transformation seems to be correct! ---------------------------------------- define i8 @demorgan_nor_use2ab(i8 %A, i8 %B) { %0: %use2b = mul i8 %B, 23 %nota = xor i8 %A, 255 %use2a = mul i8 %nota, 17 %c = or i8 %nota, %B %notc = xor i8 %c, 255 %r1 = sdiv i8 %notc, %use2b %r2 = sdiv i8 %r1, %use2a ret i8 %r2 } => define i8 @demorgan_nor_use2ab(i8 %A, i8 %B) { %0: %use2b = mul i8 %B, 23 %nota = xor i8 %A, 255 %use2a = mul i8 %nota, 17 %B.not = xor i8 %B, 255 %notc = and i8 %B.not, %A %r1 = sdiv i8 %notc, %use2b %r2 = sdiv i8 %r1, %use2a ret i8 %r2 } Transformation seems to be correct! ---------------------------------------- define i32 @demorgan_or_zext(i1 %X, i1 %Y) { %0: %zextX = zext i1 %X to i32 %zextY = zext i1 %Y to i32 %notX = xor i32 %zextX, 1 %notY = xor i32 %zextY, 1 %or = or i32 %notX, %notY ret i32 %or } => define i32 @demorgan_or_zext(i1 %X, i1 %Y) { %0: %or1.demorgan = and i1 %X, %Y %or1 = xor i1 %or1.demorgan, 1 %or = zext i1 %or1 to i32 ret i32 %or } Transformation seems to be correct! ---------------------------------------- define i32 @demorgan_and_zext(i1 %X, i1 %Y) { %0: %zextX = zext i1 %X to i32 %zextY = zext i1 %Y to i32 %notX = xor i32 %zextX, 1 %notY = xor i32 %zextY, 1 %and = and i32 %notX, %notY ret i32 %and } => define i32 @demorgan_and_zext(i1 %X, i1 %Y) { %0: %and1.demorgan = or i1 %X, %Y %and1 = xor i1 %and1.demorgan, 1 %and = zext i1 %and1 to i32 ret i32 %and } Transformation seems to be correct! ---------------------------------------- define <2 x i32> @demorgan_or_zext_vec(<2 x i1> %X, <2 x i1> %Y) { %0: %zextX = zext <2 x i1> %X to <2 x i32> %zextY = zext <2 x i1> %Y to <2 x i32> %notX = xor <2 x i32> %zextX, { 1, 1 } %notY = xor <2 x i32> %zextY, { 1, 1 } %or = or <2 x i32> %notX, %notY ret <2 x i32> %or } => define <2 x i32> @demorgan_or_zext_vec(<2 x i1> %X, <2 x i1> %Y) { %0: %or1.demorgan = and <2 x i1> %X, %Y %or1 = xor <2 x i1> %or1.demorgan, { 1, 1 } %or = zext <2 x i1> %or1 to <2 x i32> ret <2 x i32> %or } Transformation seems to be correct! ---------------------------------------- define <2 x i32> @demorgan_and_zext_vec(<2 x i1> %X, <2 x i1> %Y) { %0: %zextX = zext <2 x i1> %X to <2 x i32> %zextY = zext <2 x i1> %Y to <2 x i32> %notX = xor <2 x i32> %zextX, { 1, 1 } %notY = xor <2 x i32> %zextY, { 1, 1 } %and = and <2 x i32> %notX, %notY ret <2 x i32> %and } => define <2 x i32> @demorgan_and_zext_vec(<2 x i1> %X, <2 x i1> %Y) { %0: %and1.demorgan = or <2 x i1> %X, %Y %and1 = xor <2 x i1> %and1.demorgan, { 1, 1 } %and = zext <2 x i1> %and1 to <2 x i32> ret <2 x i32> %and } Transformation seems to be correct! ---------------------------------------- define i32 @PR28476(i32 %x, i32 %y) { %0: %cmp0 = icmp ne i32 %x, 0 %cmp1 = icmp ne i32 %y, 0 %and = and i1 %cmp0, %cmp1 %zext = zext i1 %and to i32 %cond = xor i32 %zext, 1 ret i32 %cond } => define i32 @PR28476(i32 %x, i32 %y) { %0: %cmp0 = icmp eq i32 %x, 0 %cmp1 = icmp eq i32 %y, 0 %1 = or i1 %cmp0, %cmp1 %cond = zext i1 %1 to i32 ret i32 %cond } Transformation seems to be correct! ---------------------------------------- define i32 @PR28476_logical(i32 %x, i32 %y) { %0: %cmp0 = icmp ne i32 %x, 0 %cmp1 = icmp ne i32 %y, 0 %and = select i1 %cmp0, i1 %cmp1, i1 0 %zext = zext i1 %and to i32 %cond = xor i32 %zext, 1 ret i32 %cond } => define i32 @PR28476_logical(i32 %x, i32 %y) { %0: %cmp0 = icmp eq i32 %x, 0 %cmp1 = icmp eq i32 %y, 0 %1 = or i1 %cmp0, %cmp1 %cond = zext i1 %1 to i32 ret i32 %cond } Transformation doesn't verify! ERROR: Target is more poisonous than source Example: i32 %x = #x00000000 (0) i32 %y = poison Source: i1 %cmp0 = #x0 (0) i1 %cmp1 = poison i1 %and = #x0 (0) i32 %zext = #x00000000 (0) i32 %cond = #x00000001 (1) Target: i1 %cmp0 = #x1 (1) i1 %cmp1 = poison i1 %1 = poison i32 %cond = poison Source value: #x00000001 (1) Target value: poison ------------------- SMT STATS ------------------- Num queries: 87 Num invalid: 0 Num skips: 0 Num trivial: 96 (52.5%) Num timeout: 3 (3.4%) Num errors: 0 (0.0%) Num SAT: 27 (31.0%) Num UNSAT: 57 (65.5%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -instcombine -S + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/demorgan.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/demorgan.ll