[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / NewGVN / malloc-load-removal.ll
blobca2f019d0686b4730d6a4ad189ecc7aca2bea903
1 ; RUN: opt -S -basic-aa -newgvn < %s | FileCheck %s
2 ; RUN: opt -S -basic-aa -newgvn -disable-simplify-libcalls < %s | FileCheck %s -check-prefix=CHECK_NO_LIBCALLS
3 ; PR13694
5 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
6 target triple = "x86_64-apple-macosx10.8.0"
8 declare i8* @malloc(i64) nounwind
10 define noalias i8* @test1() nounwind uwtable ssp {
11 entry:
12   %call = tail call i8* @malloc(i64 100) nounwind
13   %0 = load i8, i8* %call, align 1
14   %tobool = icmp eq i8 %0, 0
15   br i1 %tobool, label %if.end, label %if.then
17 if.then:                                          ; preds = %entry
18   store i8 0, i8* %call, align 1
19   br label %if.end
21 if.end:                                           ; preds = %if.then, %entry
22   ret i8* %call
24 ; CHECK-LABEL: @test1(
25 ; CHECK-NOT: load
26 ; CHECK-NOT: icmp
28 ; CHECK_NO_LIBCALLS-LABEL: @test1(
29 ; CHECK_NO_LIBCALLS: load
30 ; CHECK_NO_LIBCALLS: icmp
33 declare i8* @_Znwm(i64) nounwind
35 define noalias i8* @test2() nounwind uwtable ssp {
36 entry:
37   %call = tail call i8* @_Znwm(i64 100) nounwind
38   %0 = load i8, i8* %call, align 1
39   %tobool = icmp eq i8 %0, 0
40   br i1 %tobool, label %if.end, label %if.then
42 if.then:                                          ; preds = %entry
43   store i8 0, i8* %call, align 1
44   br label %if.end
46 if.end:                                           ; preds = %if.then, %entry
47   ret i8* %call
49 ; CHECK-LABEL: @test2(
50 ; CHECK-NOT: load
51 ; CHECK-NOT: icmp
53 ; CHECK_NO_LIBCALLS-LABEL: @test2(
54 ; CHECK_NO_LIBCALLS: load
55 ; CHECK_NO_LIBCALLS: icmp
58 declare i8* @aligned_alloc(i64, i64) nounwind
60 define noalias i8* @test3() nounwind uwtable ssp {
61 entry:
62   %call = tail call i8* @aligned_alloc(i64 256, i64 32) nounwind
63   %0 = load i8, i8* %call, align 32
64   %tobool = icmp eq i8 %0, 0
65   br i1 %tobool, label %if.end, label %if.then
67 if.then:                                          ; preds = %entry
68   store i8 0, i8* %call, align 1
69   br label %if.end
71 if.end:                                           ; preds = %if.then, %entry
72   ret i8* %call
74 ; CHECK-LABEL: @test3(
75 ; CHECK-NOT: load
76 ; CHECK-NOT: icmp
78 ; CHECK_NO_LIBCALLS-LABEL: @test3(
79 ; CHECK_NO_LIBCALLS: load
80 ; CHECK_NO_LIBCALLS: icmp