diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2015-03-25 17:12:14 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2015-03-25 19:44:08 +0530 |
| commit | 4283b2ab5053eec3c7f95682e82aee9006c58eef (patch) | |
| tree | e8a5c9dc6311b248cfcde17f3dfde2f66b3ff5be /src | |
| parent | 5a5845dc010401dccb14954239ea60a2e27e8406 (diff) | |
| parent | 1663665be0f3e7b0bef782d72a3201cf6138e55b (diff) | |
| download | rust-4283b2ab5053eec3c7f95682e82aee9006c58eef.tar.gz rust-4283b2ab5053eec3c7f95682e82aee9006c58eef.zip | |
Rollup merge of #23692 - yjh0502:fix/simd-overflow, r=pnkfelix
Disable overflow checking on SIMD operations, fix #23037
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_trans/trans/expr.rs | 6 | ||||
| -rw-r--r-- | src/test/run-pass/issue-23037.rs | 19 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/librustc_trans/trans/expr.rs b/src/librustc_trans/trans/expr.rs index 4d7431a20b7..ba8de6da42f 100644 --- a/src/librustc_trans/trans/expr.rs +++ b/src/librustc_trans/trans/expr.rs @@ -1766,6 +1766,8 @@ fn trans_eager_binop<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, ast::BiAdd => { if is_float { FAdd(bcx, lhs, rhs, binop_debug_loc) + } else if is_simd { + Add(bcx, lhs, rhs, binop_debug_loc) } else { let (newbcx, res) = with_overflow_check( bcx, OverflowOp::Add, info, lhs_t, lhs, rhs, binop_debug_loc); @@ -1776,6 +1778,8 @@ fn trans_eager_binop<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, ast::BiSub => { if is_float { FSub(bcx, lhs, rhs, binop_debug_loc) + } else if is_simd { + Sub(bcx, lhs, rhs, binop_debug_loc) } else { let (newbcx, res) = with_overflow_check( bcx, OverflowOp::Sub, info, lhs_t, lhs, rhs, binop_debug_loc); @@ -1786,6 +1790,8 @@ fn trans_eager_binop<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, ast::BiMul => { if is_float { FMul(bcx, lhs, rhs, binop_debug_loc) + } else if is_simd { + Mul(bcx, lhs, rhs, binop_debug_loc) } else { let (newbcx, res) = with_overflow_check( bcx, OverflowOp::Mul, info, lhs_t, lhs, rhs, binop_debug_loc); diff --git a/src/test/run-pass/issue-23037.rs b/src/test/run-pass/issue-23037.rs new file mode 100644 index 00000000000..5257daa047a --- /dev/null +++ b/src/test/run-pass/issue-23037.rs @@ -0,0 +1,19 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(core)] + +use std::simd::i32x4; +fn main() { + let foo = i32x4(1,2,3,4); + let bar = i32x4(40,30,20,10); + let baz = foo + bar; + assert!(baz.0 == 41 && baz.1 == 32 && baz.2 == 23 && baz.3 == 14); +} |
