The below function caused error python: /usr/lib/llvm-6.0/include/llvm/IR/Instructions.h:1257: void llvm::FCmpInst::AssertOK(): Assertion `getOperand(0)->getType()->isFPOrFPVectorTy() && "Invalid operand types for FCmp instruction"' failed.
when translating an assert tvm/src/codegen/llvm/codegen_llvm.cc:841: placeholder == tvm_struct_get(arg2, 0, 1)
This assert is added because the input and output use the same buffer.
import tvm
import tvm.relay as relay
data_0 = relay.var("data_0", shape=(100, 5))
data_1 = relay.var("data_1", shape=(100, 7))
data_1_new = relay.transpose(data_1)
output = relay.Tuple([data_0, data_1_new])
f = relay.Function([data_0, data_1], output)
relay.build(f, 'llvm')
fn (%data_0: Tensor[(100, 5), float32],
%data_1: Tensor[(100, 7), float32]) {
%0 = transpose(%data_1, axes=None)
%1 = (%data_0, %0)
%1
}
Here is the ir after fuse_ops
fn (%data_0: Tensor[(100, 5), float32],
%data_1: Tensor[(100, 7), float32])
-> Tuple[Tensor[(100, 5), float32], Tensor[(7, 100), float32]] {
%0 = fn(%p0: Tensor[(100, 5), float32],
%p1: Tensor[(100, 7), float32])
-> Tuple[Tensor[(100, 5), float32], Tensor[(7, 100), float32]] {
%1 = transpose(%p1, axes=None)
%2 = (%p0, %1)
%2
}
%3 = %0(%data_0, %data_1)
%3
}