[ARM64]Scalar right shift uint64_t by 64 generates incorrect result.

James Molloy james.molloy at arm.com
Wed May 14 01:00:31 PDT 2014


Hi Hao,

This patch looks fine. One thing I did notice:

+// CHECK-AArch64-LABEL: test_vsrad_n_u64_2

I don't actually know if FileCheck is case insensitive for CHECK lines, so I don't know if this line is firing? If you could correct the capitalization anyway it LGTM.

Cheers,

James

> -----Original Message-----
> From: cfe-commits-bounces at cs.uiuc.edu [mailto:cfe-commits-
> bounces at cs.uiuc.edu] On Behalf Of Hao Liu
> Sent: 14 May 2014 07:51
> To: Hao Liu; t.p.northover at gmail.com
> Cc: cfe-commits at cs.uiuc.edu
> Subject: [PATCH] [ARM64]Scalar right shift uint64_t by 64 generates incorrect
> result.
> 
> Hi t.p.northover,
> 
> Hi Tim and other reviewers,
> 
> In the front end CGBuiltin.cpp, we generate incorrect code for scalar right
> shift uint64_t by 64, which is incorrectly transferred into "LSR X0, #63".
> So when we try to right shift 0xf000000000000000 by 64, the result is 0x1, but
> it should be 0x0.
> 
> As according to LLVM reference, the right shift amount of i64 should be [0,
> 63], we can't generate such IR like "lshr i64 %tmp, 64". To fix this problem,
> this patch just return 0 result when the shift amount is 64.
> 
> Ask for code review.
> 
> Thanks,
> -Hao
> 
> http://reviews.llvm.org/D3755
> 
> Files:
>   lib/CodeGen/CGBuiltin.cpp
>   test/CodeGen/aarch64-neon-intrinsics.c







More information about the cfe-commits mailing list