[llvm-commits] [PATCH] RFC: fix some problems in GeneralHash
    Jay Foad 
    jay.foad at gmail.com
       
    Thu Feb 23 01:27:42 PST 2012
    
    
  
> $ cat ur.c
> unsigned unaligned_read(const void *p) {
>   unsigned x;
>   memcpy(&x, p, sizeof(x));
>   return x;
> }
>
> $ clang -w -O ur.c -S -emit-llvm -o-
> define i32 @unaligned_read(i8* nocapture %p) nounwind uwtable readonly ssp {
> entry:
>   %0 = bitcast i8* %p to i32*
>   %srcval = load i32* %0, align 1
>   ret i32 %srcval
> }
If I change your function so it takes an int*:
  unsigned unaligned_read(const int *p) { ... }
then I still get the same unaligned load:
  %srcval = load i32* %p, align 1
Can't the compiler assume that p is correctly aligned for an int? How
can I tell the compiler that I know that p *is* correctly aligned?
Thanks,
Jay.
    
    
More information about the llvm-commits
mailing list