fix operators for 64 bit integer
authorHomer Hsing <homer.xing@intel.com>
Mon, 4 Nov 2013 01:39:33 +0000 (09:39 +0800)
committerZhigang Gong <zhigang.gong@intel.com>
Mon, 4 Nov 2013 07:34:06 +0000 (15:34 +0800)
if operand is signed 64 bit integer, emit -1 for SExt casting

Signed-off-by: Homer Hsing <homer.xing@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
backend/src/llvm/llvm_gen_backend.cpp

index 6f4ed72..b824bf9 100644 (file)
@@ -1694,7 +1694,7 @@ namespace gbe
           const ir::ImmediateIndex zero = ctx.newIntegerImmediate(0, dstType);
           ir::ImmediateIndex one;
           if (I.getOpcode() == Instruction::SExt
-              && (dstType == ir::TYPE_S8 || dstType == ir::TYPE_S16 || dstType == ir::TYPE_S32))
+              && (dstType == ir::TYPE_S8 || dstType == ir::TYPE_S16 || dstType == ir::TYPE_S32 || dstType == ir::TYPE_S64))
             one = ctx.newIntegerImmediate(-1, dstType);
           else
             one = ctx.newIntegerImmediate(1, dstType);