Test source: git
Source: /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll -- 1. Annotation2MetadataPass ERROR: Unsupported attribute: noalias -- 2. Annotation2MetadataPass ERROR: Unsupported attribute: noalias ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i64 @strlen(ptr) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i1 @test2_fn4(i8 %bf.load) { entry: %tobool = icmp slt i8 %bf.load, 0 ret i1 %tobool } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @test2_fn6() declare i1 @test2_fn4(i8) define i32 @test2_fn5() { entry: %call8 = call i32 @test2_fn6() %trunc = trunc i32 %call8 to i8 %call1 = call i1 @test2_fn4(i8 %trunc) %#0 = xor i1 %call1, 1 assume i1 %#0 ret i32 %call8 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @memcmp(ptr, ptr, i64) @.str.79 = constant 14 bytes, align 1 define i32 @test2_fn6() { init: store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 br label %entry entry: %call = memcmp ptr @.str.79, ptr @.str.79, i64 2 ret i32 %call } Transformation seems to be correct! (syntactically equal) -- 3. ForceFunctionAttrsPass ERROR: Unsupported attribute: noalias ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i64 @strlen(ptr) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i1 @test2_fn4(i8 %bf.load) { entry: %tobool = icmp slt i8 %bf.load, 0 ret i1 %tobool } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @test2_fn6() declare i1 @test2_fn4(i8) define i32 @test2_fn5() { entry: %call8 = call i32 @test2_fn6() %trunc = trunc i32 %call8 to i8 %call1 = call i1 @test2_fn4(i8 %trunc) %#0 = xor i1 %call1, 1 assume i1 %#0 ret i32 %call8 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @memcmp(ptr, ptr, i64) @.str.79 = constant 14 bytes, align 1 define i32 @test2_fn6() { init: store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 br label %entry entry: %call = memcmp ptr @.str.79, ptr @.str.79, i64 2 ret i32 %call } Transformation seems to be correct! (syntactically equal) -- 4. ForceFunctionAttrsPass ERROR: Unsupported attribute: noalias ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i64 @strlen(ptr) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i1 @test2_fn4(i8 %bf.load) { entry: %tobool = icmp slt i8 %bf.load, 0 ret i1 %tobool } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @test2_fn6() declare i1 @test2_fn4(i8) define i32 @test2_fn5() { entry: %call8 = call i32 @test2_fn6() %trunc = trunc i32 %call8 to i8 %call1 = call i1 @test2_fn4(i8 %trunc) %#0 = xor i1 %call1, 1 assume i1 %#0 ret i32 %call8 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @memcmp(ptr, ptr, i64) @.str.79 = constant 14 bytes, align 1 define i32 @test2_fn6() { init: store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 br label %entry entry: %call = memcmp ptr @.str.79, ptr @.str.79, i64 2 ret i32 %call } Transformation seems to be correct! (syntactically equal) -- 5. InferFunctionAttrsPass : Skipping unsupported ERROR: Unsupported attribute: noalias -- 6. InferFunctionAttrsPass : Skipping unsupported ERROR: Unsupported attribute: noalias -- 7. CoroEarlyPass ERROR: Unsupported attribute: noalias ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i1 @test2_fn4(i8 %bf.load) { entry: %tobool = icmp slt i8 %bf.load, 0 ret i1 %tobool } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @test2_fn6() declare i1 @test2_fn4(i8) define i32 @test2_fn5() { entry: %call8 = call i32 @test2_fn6() %trunc = trunc i32 %call8 to i8 %call1 = call i1 @test2_fn4(i8 %trunc) %#0 = xor i1 %call1, 1 assume i1 %#0 ret i32 %call8 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @memcmp(nocapture ptr, nocapture ptr, i64) nofree willreturn memory(argmem: read) @.str.79 = constant 14 bytes, align 1 define i32 @test2_fn6() { init: store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 br label %entry entry: %call = memcmp ptr @.str.79, ptr @.str.79, i64 2 ret i32 %call } Transformation seems to be correct! (syntactically equal) -- 8. CoroEarlyPass ERROR: Unsupported attribute: noalias ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i1 @test2_fn4(i8 %bf.load) { entry: %tobool = icmp slt i8 %bf.load, 0 ret i1 %tobool } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @test2_fn6() declare i1 @test2_fn4(i8) define i32 @test2_fn5() { entry: %call8 = call i32 @test2_fn6() %trunc = trunc i32 %call8 to i8 %call1 = call i1 @test2_fn4(i8 %trunc) %#0 = xor i1 %call1, 1 assume i1 %#0 ret i32 %call8 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @memcmp(nocapture ptr, nocapture ptr, i64) nofree willreturn memory(argmem: read) @.str.79 = constant 14 bytes, align 1 define i32 @test2_fn6() { init: store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 br label %entry entry: %call = memcmp ptr @.str.79, ptr @.str.79, i64 2 ret i32 %call } Transformation seems to be correct! (syntactically equal) -- 9. ModuleToFunctionPassAdaptor ERROR: Unsupported attribute: noalias ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i1 @test2_fn4(i8 %bf.load) { entry: %tobool = icmp slt i8 %bf.load, 0 ret i1 %tobool } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @test2_fn6() declare i1 @test2_fn4(i8) define i32 @test2_fn5() { entry: %call8 = call i32 @test2_fn6() %trunc = trunc i32 %call8 to i8 %call1 = call i1 @test2_fn4(i8 %trunc) %#0 = xor i1 %call1, 1 assume i1 %#0 ret i32 %call8 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- declare i32 @memcmp(nocapture ptr, nocapture ptr, i64) nofree willreturn memory(argmem: read) @.str.79 = constant 14 bytes, align 1 define i32 @test2_fn6() { init: store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 br label %entry entry: %call = memcmp ptr @.str.79, ptr @.str.79, i64 2 ret i32 %call } Transformation seems to be correct! (syntactically equal) -- 1. PassManager<Function> : Skipping NOP ERROR: Unsupported attribute: noalias -- 2. EntryExitInstrumenterPass : Skipping unsupported ERROR: Unsupported attribute: noalias -- 3. EntryExitInstrumenterPass : Skipping unsupported ERROR: Unsupported attribute: noalias -- 4. LowerExpectIntrinsicPass ERROR: Unsupported attribute: noalias -- 5. LowerExpectIntrinsicPass ERROR: Unsupported attribute: noalias -- 6. SimplifyCFGPass ERROR: Unsupported attribute: noalias -- 7. SimplifyCFGPass ERROR: Unsupported attribute: noalias -- 8. SROAPass ERROR: Unsupported attribute: noalias -- 9. SROAPass ERROR: Unsupported attribute: noalias -- 10. EarlyCSEPass ERROR: Unsupported attribute: noalias -- 11. EarlyCSEPass ERROR: Unsupported attribute: noalias -- 12. PassManager<Function> : Skipping NOP ERROR: Unsupported attribute: noalias -- 13. PassManager<Function> : Skipping NOP -- 14. EntryExitInstrumenterPass : Skipping unsupported -- 15. EntryExitInstrumenterPass : Skipping unsupported -- 16. LowerExpectIntrinsicPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 17. LowerExpectIntrinsicPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 18. SimplifyCFGPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 19. SimplifyCFGPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 20. SROAPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 21. SROAPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 22. EarlyCSEPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 23. EarlyCSEPass ---------------------------------------- declare i1 @test2_fn2(ptr) @.str.78 = constant 12 bytes, align 1 @.str.79 = constant 14 bytes, align 1 @.str.80 = constant 18 bytes, align 16 define void @test2(ptr %this) { init: store [12 x i8] { 45, 45, 116, 101, 115, 116, 45, 105, 110, 102, 111, 0 }, ptr @.str.78, align 1 store [14 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 105, 110, 102, 111, 0 }, ptr @.str.79, align 1 store [18 x i8] { 45, 45, 116, 101, 115, 116, 45, 110, 111, 99, 111, 109, 112, 114, 101, 115, 115, 0 }, ptr @.str.80, align 16 br label %entry entry: %call16 = call i1 @test2_fn2(ptr @.str.78) %call17 = call i1 @test2_fn2(ptr @.str.79) br i1 %call17, label %if.then18, label %if.else21 if.else21: %call22 = call i1 @test2_fn2(ptr @.str.80) br label %common.ret if.then18: %call19 = call i1 @test2_fn2(ptr @.str.78) %frombool20 = zext i1 %call19 to i8 store i8 %frombool20, ptr %this, align 4 br label %common.ret common.ret: ret void } Transformation seems to be correct! (syntactically equal) -- 24. PassManager<Function> : Skipping NOP -- 25. PassManager<Function> : Skipping NOP -- 26. EntryExitInstrumenterPass : Skipping unsupported -- 27. EntryExitInstrumenterPass : Skipping unsupported -- 28. LowerExpectIntrinsicPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 29. LowerExpectIntrinsicPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 30. SimplifyCFGPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 31. SimplifyCFGPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 32. SROAPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 33. SROAPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 34. EarlyCSEPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 35. EarlyCSEPass ---------------------------------------- declare i64 @strlen(nocapture ptr) nofree willreturn memory(argmem: read) declare i64 @test2_fn3(dereferenceable(24) align(8) ptr) declare i32 @test2_fn5() define i1 @test2_fn2(ptr %__rhs) { entry: %call = strlen ptr %__rhs %call1 = call i64 @test2_fn3(dereferenceable(24) align(8) ptr null) %cmp2.not = icmp eq i64 %call, %call1 br i1 %cmp2.not, label %if.end, label %cleanup if.end: %call3 = call i32 @test2_fn5() %cmp4 = icmp eq i32 %call3, 0 br label %cleanup cleanup: %retval.0 = phi i1 [ %cmp4, %if.end ], [ 0, %entry ] ret i1 %retval.0 } Transformation seems to be correct! (syntactically equal) -- 36. PassManager<Function> : Skipping NOP -- 37. PassManager<Function> : Skipping NOP -- 38. EntryExitInstrumenterPass : Skipping unsupported -- 39. EntryExitInstrumenterPass : Skipping unsupported -- 40. LowerExpectIntrinsicPass ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) -- 41. LowerExpectIntrinsicPass ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) -- 42. SimplifyCFGPass ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 1 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } Transformation seems to be correct! (syntactically equal) -- 43. SimplifyCFGPass ---------------------------------------- declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 8 %call1 = call i1 @test2_fn4(i8 %l) br i1 %call1, label %cond.true, label %cond.end cond.true: %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 br label %cond.end cond.end: %cond = phi i64 [ %call2, %cond.true ], [ 0, %entry ] ret i64 %cond } => declare i1 @test2_fn4(i8) define i64 @test2_fn3(ptr dereferenceable(24) align(8) %this) { entry: %l = load i8, ptr dereferenceable(24) align(8) %this, align 8 %call1 = call i1 @test2_fn4(i8 %l) %__size_ = gep ptr dereferenceable(24) align(8) %this, 24 x i64 0, 1 x i64 8 %call2 = load i64, ptr %__size_, align 8 %cond = select i1 %call1, i64 %call2, i64 0 ret i64 %cond } Transformation doesn't verify! (unsound) ERROR: Source is more defined than target Example: ptr dereferenceable(24) align(8) %this = pointer(non-local, block_id=1, offset=0) / Address=#x08 Source: i8 %l = poison i1 %call1 = #x0 (0) >> Jump to %cond.end i64 %cond = #x0000000000000000 (0) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 alive: false address: 0 Block 1 > size: 32 align: 8 alloc type: 2 alive: false address: 8 Block 2 > size: 0 align: 1 alloc type: 0 alive: true address: 1 Target: i8 %l = poison i1 %call1 = #x0 (0) ptr %__size_ = pointer(non-local, block_id=1, offset=8) / Address=#x10 i64 %call2 = UB triggered! Pass: SimplifyCFGPass 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=default<O2>' '-S' '/bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats' Wrote bitcode to: "/home/nlopes/alive2/build/logs/constraint-elimination-placement_uom6nSdU_t1ex.bc" ------------------- SMT STATS ------------------- Num queries: 32 Num invalid: 0 Num skips: 0 Num trivial: 5 (13.5%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 22 (68.8%) Num UNSAT: 10 (31.2%) Alive2: Transform doesn't verify; aborting!
RUN: at line 2: /home/nlopes/alive2/build/opt-alive.sh -passes='default<O2>' -S /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll + /home/nlopes/alive2/build/opt-alive.sh '-passes=default<O2>' -S /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll