Mercurial > hg > octave-nkf
changeset 18299:e243b705a726 stable
Fix building JIT with 64-bit indexing (bug #41163).
jit-typeinfo.cc (jit_typeinfo): Create two constants for the value 1. One
constant (one_idx) is of type index_t and the other (one_int) is of int_t. Use
these constants when comparing to objects of the matching type.
author | Lasse Schuirmann <lasse@schuirmann.net> |
---|---|
date | Tue, 14 Jan 2014 11:27:20 -0800 |
parents | ec975e826728 |
children | 508f67c72854 |
files | libinterp/corefcn/jit-typeinfo.cc |
diffstat | 1 files changed, 8 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/jit-typeinfo.cc +++ b/libinterp/corefcn/jit-typeinfo.cc @@ -1609,12 +1609,8 @@ body = fn.new_block (); builder.SetInsertPoint (body); { - llvm::Value *one = llvm::ConstantInt::get (index_t, 1); - llvm::Value *ione; - if (index_t == int_t) - ione = one; - else - ione = llvm::ConstantInt::get (int_t, 1); + llvm::Value *one_idx = llvm::ConstantInt::get (index_t, 1); + llvm::Value *one_int = llvm::ConstantInt::get (int_t, 1); llvm::Value *undef = llvm::UndefValue::get (scalar_t); llvm::Value *mat = fn.argument (builder, 0); @@ -1624,7 +1620,7 @@ llvm::Value *int_idx = builder.CreateFPToSI (idx, index_t); llvm::Value *check_idx = builder.CreateSIToFP (int_idx, scalar_t); llvm::Value *cond0 = builder.CreateFCmpUNE (idx, check_idx); - llvm::Value *cond1 = builder.CreateICmpSLT (int_idx, one); + llvm::Value *cond1 = builder.CreateICmpSLT (int_idx, one_idx); llvm::Value *cond = builder.CreateOr (cond0, cond1); llvm::BasicBlock *done = fn.new_block ("done"); @@ -1647,7 +1643,7 @@ builder.CreateCondBr (cond, bounds_error, success); builder.SetInsertPoint (bounds_error); - gindex_range.call (builder, ione, ione, int_idx, len); + gindex_range.call (builder, one_int, one_int, int_idx, len); builder.CreateBr (done); builder.SetInsertPoint (success); @@ -1681,7 +1677,8 @@ body = fn.new_block (); builder.SetInsertPoint (body); { - llvm::Value *one = llvm::ConstantInt::get (index_t, 1); + llvm::Value *one_idx = llvm::ConstantInt::get (index_t, 1); + llvm::Value *one_int = llvm::ConstantInt::get (int_t, 1); llvm::Value *mat = fn.argument (builder, 0); llvm::Value *idx = fn.argument (builder, 1); @@ -1690,7 +1687,7 @@ llvm::Value *int_idx = builder.CreateFPToSI (idx, index_t); llvm::Value *check_idx = builder.CreateSIToFP (int_idx, scalar_t); llvm::Value *cond0 = builder.CreateFCmpUNE (idx, check_idx); - llvm::Value *cond1 = builder.CreateICmpSLT (int_idx, one); + llvm::Value *cond1 = builder.CreateICmpSLT (int_idx, one_idx); llvm::Value *cond = builder.CreateOr (cond0, cond1); llvm::BasicBlock *done = fn.new_block ("done"); @@ -1708,7 +1705,7 @@ llvm::Value *rcount = builder.CreateExtractValue (mat, 0); rcount = builder.CreateLoad (rcount); - cond1 = builder.CreateICmpSGT (rcount, one); + cond1 = builder.CreateICmpSGT (rcount, one_int); cond = builder.CreateOr (cond0, cond1); llvm::BasicBlock *bounds_error = fn.new_block ("bounds_error", done);