----- subtest:[unary operators] ----- function float4 main():POSITION // mangledName=main { return cast[float4] binop(+) [float] { binop(+) [float] { binop(+) [float] { binop(+) [float] { cast[float] int32(0) unop(-) [float] { float32(0.1) } } cast[float] unop(~) [int] { unop(~) [int] { int32(0) } } } cast[float] unop(!) [bool] { cast[bool] int32(0) } } cast[float] unop(!) [bool] { unop(!) [bool] { bool(0) } } } } original IR: module { struct:00E6B088:main__ret{ [4 x f32] __RetVal:POSITION } function 'main'() -> struct:00E6B088:main__ret { block { 00E63780 = cast f32 i32:0 00E63B20 = neg(f32:0.1) 00E79900 = add(00E63780,00E63B20) 00E6B110 = bitwise-inv(i32:0) 00E81A38 = bitwise-inv(00E6B110) 00E81A98 = cast f32 00E81A38 00E79CF0 = add(00E79900,00E81A98) 00E81AF8 = cast i1 i32:0 00E7A168 = logical-inv(00E81AF8) 00E7A1C8 = cast f32 00E7A168 00E79970 = add(00E79CF0,00E7A1C8) 00E82B98 = logical-inv(i1:0) 00E82EF8 = logical-inv(00E82B98) 00E82FB8 = cast f32 00E82EF8 00E79660 = add(00E79970,00E82FB8) 00E82D18 = cast [4 x f32] 00E79660 00E83018 = aggregate struct:00E6B088:main__ret (00E82D18) ret struct:00E6B088:main__ret 00E83018 } } } optimized IR: module { struct:00E6B088:main__ret{ [4 x f32] __RetVal:POSITION } function 'main'() -> struct:00E6B088:main__ret { block { 00E82D18 = cast [4 x f32] f32:0.9 00E83018 = aggregate struct:00E6B088:main__ret (00E82D18) ret struct:00E6B088:main__ret 00E83018 } } }