[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / Transforms / InstCombine / assume-separate_storage.ll
blobb94c303e5a70c56b1c1c7f2fa2c81a447be395ca
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s
4 declare void @llvm.assume(i1 noundef)
6 ; Just something to let us check that separate_storage bundles don't break
7 ; anything when given an operand that's not an instruction to fold.
8 @some_global = global i32 777
10 define void @simple_folding(ptr %a, ptr %b) {
11 ; CHECK-LABEL: @simple_folding(
12 ; CHECK-NEXT:  entry:
13 ; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "separate_storage"(ptr [[A:%.*]], ptr [[B:%.*]]) ]
14 ; CHECK-NEXT:    ret void
16 entry:
17   %p1 = getelementptr i8, ptr %a, i64 123
18   %p2 = getelementptr i8, ptr %b, i64 777
19   call void @llvm.assume(i1 1) ["separate_storage"(ptr %p1, ptr %p2)]
20   ret void
23 define i64 @folds_removed_operands(ptr %a, ptr %b, i64 %n1, i64 %n2) {
24 ; CHECK-LABEL: @folds_removed_operands(
25 ; CHECK-NEXT:  entry:
26 ; CHECK-NEXT:    [[REASS_ADD:%.*]] = shl i64 [[N2:%.*]], 1
27 ; CHECK-NEXT:    [[Y:%.*]] = add i64 [[N1:%.*]], [[REASS_ADD]]
28 ; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "separate_storage"(ptr [[A:%.*]], ptr [[B:%.*]]) ]
29 ; CHECK-NEXT:    ret i64 [[Y]]
31 entry:
32   ; Ordinarily, n1 + n2 + n2 would get canonicalized into n1 + (n2 << 1) unless
33   ; there's another use of n1 + n2. Make sure that we remember to put removed
34   ; arguments to separate_storage bundles back on the worklist.
35   %x = add i64 %n1, %n2
36   %y = add i64 %x, %n2
37   %p1 = getelementptr i8, ptr %a, i64 %x
38   call void @llvm.assume(i1 1) ["separate_storage"(ptr %p1, ptr %b)]
39   ret i64 %y
42 define void @handles_globals(ptr %a) {
43 ; CHECK-LABEL: @handles_globals(
44 ; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "separate_storage"(ptr [[A:%.*]], ptr @some_global) ]
45 ; CHECK-NEXT:    ret void
47   %derived = getelementptr i8, ptr @some_global, i65 3
48   call void @llvm.assume(i1 1) ["separate_storage"(ptr %a, ptr %derived)]
49   ret void