Preserve AA metadata when combining (cast (load (...))) -> (load (cast
[oota-llvm.git] / test / Transforms / InstCombine / loadstore-aa-metadata.ll
1 ; RUN: opt -instcombine -S < %s | FileCheck %s
2
3 define i32 @test_load_cast_combine_tbaa(float* %ptr) {
4 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves TBAA.
5 ; CHECK-LABEL: @test_load_cast_combine_tbaa(
6 ; CHECK: load i32* %{{.*}}, !tbaa !0
7 entry:
8   %l = load float* %ptr, !tbaa !0
9   %c = bitcast float %l to i32
10   ret i32 %c
11 }
12
13 define i32 @test_load_cast_combine_noalias(float* %ptr) {
14 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves no-alias metadata.
15 ; CHECK-LABEL: @test_load_cast_combine_noalias(
16 ; CHECK: load i32* %{{.*}}, !alias.scope !2, !noalias !1
17 entry:
18   %l = load float* %ptr, !alias.scope !2, !noalias !1
19   %c = bitcast float %l to i32
20   ret i32 %c
21 }
22
23 !0 = metadata !{ metadata !1, metadata !1, i64 0 }
24 !1 = metadata !{ metadata !1 }
25 !2 = metadata !{ metadata !2, metadata !1 }