xref: /llvm-project/llvm/test/Transforms/GVN/nontemporal.ll (revision a33f018b89c07e0728539b34c158e88a7db49982)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=gvn -S < %s | FileCheck %s
3
4; Check that !nontemporal metadata is preserved only if both original
5; instructions are marked.
6define i64 @one_nontemporal(ptr %p) {
7; CHECK-LABEL: @one_nontemporal(
8; CHECK-NEXT:    [[A:%.*]] = load i64, ptr [[P:%.*]], align 4
9; CHECK-NEXT:    [[C:%.*]] = add i64 [[A]], [[A]]
10; CHECK-NEXT:    ret i64 [[C]]
11;
12  %a = load i64, ptr %p
13  %b = load i64, ptr %p, !nontemporal !0
14  %c = add i64 %a, %b
15  ret i64 %c
16}
17
18define i64 @both_nontemporal(ptr %p) {
19; CHECK-LABEL: @both_nontemporal(
20; CHECK-NEXT:    [[A:%.*]] = load i64, ptr [[P:%.*]], align 4, !nontemporal !0
21; CHECK-NEXT:    [[C:%.*]] = add i64 [[A]], [[A]]
22; CHECK-NEXT:    ret i64 [[C]]
23;
24  %a = load i64, ptr %p, !nontemporal !0
25  %b = load i64, ptr %p, !nontemporal !0
26  %c = add i64 %a, %b
27  ret i64 %c
28}
29
30!0 = !{i32 1}
31