changeset 18274: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	Tue Jan 14 10:05:03 2014 -0800
+++ b/libinterp/corefcn/jit-typeinfo.cc	Tue Jan 14 11:27:20 2014 -0800
@@ -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);