@@ -1276,7 +1276,7 @@ Value *CodeGen_Hexagon::shuffle_vectors(Value *a, Value *b,
12761276 Value *packed = call_intrin_cast (
12771277 native2_ty,
12781278 INTRINSIC_128B (vdealvdd),
1279- {ab_i1, ab_i0, ConstantInt::get (i32_t , -element_bytes)});
1279+ {ab_i1, ab_i0, ConstantInt::getSigned (i32_t , -element_bytes)});
12801280 llvm::Intrinsic::ID intrin = start == 0 ? INTRINSIC_128B (lo) : INTRINSIC_128B (hi);
12811281 ret_i = call_intrin_cast (native_ty, intrin, {packed});
12821282 } else {
@@ -1589,6 +1589,8 @@ Value *CodeGen_Hexagon::vdelta(Value *lut, const vector<int> &indices) {
15891589 if (generate_vdelta (indices, reverse, switches)) {
15901590 vector<Constant *> control_elements (switches.size ());
15911591 for (int i = 0 ; i < (int )switches.size (); i++) {
1592+ internal_assert (switches[i] >= 0 && switches[i] <= 255 )
1593+ << " vdelta switch value " << switches[i] << " doesn't fit in 8 bits\n " ;
15921594 control_elements[i] = ConstantInt::get (i8_t , switches[i]);
15931595 }
15941596 Value *control = ConstantVector::get (control_elements);
@@ -1606,7 +1608,7 @@ Value *CodeGen_Hexagon::vdelta(Value *lut, const vector<int> &indices) {
16061608
16071609Value *CodeGen_Hexagon::create_vector (llvm::Type *ty, int val) {
16081610 llvm::Type *scalar_ty = ty->getScalarType ();
1609- Constant *value = ConstantInt::get (scalar_ty, val);
1611+ Constant *value = ConstantInt::getSigned (scalar_ty, val);
16101612 return get_splat (get_vector_num_elements (ty), value);
16111613}
16121614
@@ -1637,7 +1639,7 @@ Value *CodeGen_Hexagon::vlut(Value *lut, Value *idx, int min_index, int max_inde
16371639 vector<Value *> indices;
16381640 Value *replicate_val = ConstantInt::get (i8_t , replicate);
16391641 for (int i = 0 ; i < replicate; i++) {
1640- Value *pos = ConstantInt::get (idx16-> getType () , i);
1642+ Value *pos = get_splat (idx16_elems, ConstantInt::get (i16_t , i) );
16411643 indices.emplace_back (call_intrin (idx16->getType (),
16421644 " halide.hexagon.add_mul.vh.vh.b" ,
16431645 {pos, idx16, replicate_val}));
@@ -1719,7 +1721,7 @@ Value *CodeGen_Hexagon::vlut(Value *lut, const vector<int> &indices) {
17191721 min_index = std::min (min_index, i);
17201722 max_index = std::max (max_index, i);
17211723 }
1722- llvm_indices.push_back (ConstantInt::get (i16_t , i));
1724+ llvm_indices.push_back (ConstantInt::getSigned (i16_t , i));
17231725 }
17241726
17251727 // We use i16 indices because we can't support LUTs with more than
0 commit comments