brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · fc7f216 Raw
92 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -aa-pipeline=basic-aa,globals-aa -passes="require<globals-aa>,function(gvn,instcombine)" -S -enable-unsafe-globalsmodref-alias-results | FileCheck %s3;4; Note that this test relies on an unsafe feature of GlobalsModRef. While this5; test is correct and safe, GMR's technique for handling this isn't generally.6 7target datalayout = "p:32:32:32"8 9@G = internal global ptr null		; <ptr> [#uses=3]10 11declare noalias ptr @malloc(i32) allockind("alloc,uninitialized") allocsize(0) inaccessiblememonly12define void @malloc_init() {13; CHECK-LABEL: @malloc_init(14; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(4) ptr @malloc(i32 4)15; CHECK-NEXT:    store ptr [[A]], ptr @G, align 416; CHECK-NEXT:    ret void17;18  %a = call ptr @malloc(i32 4)19  store ptr %a, ptr @G20  ret void21}22 23define i32 @malloc_test(ptr %P) {24; CHECK-LABEL: @malloc_test(25; CHECK-NEXT:    store i32 123, ptr [[P:%.*]], align 426; CHECK-NEXT:    ret i32 027;28  %g1 = load ptr, ptr @G		; <ptr> [#uses=2]29  %h1 = load i32, ptr %g1		; <i32> [#uses=1]30  store i32 123, ptr %P31  %g2 = load ptr, ptr @G		; <ptr> [#uses=0]32  %h2 = load i32, ptr %g1		; <i32> [#uses=1]33  %X = sub i32 %h1, %h2		; <i32> [#uses=1]34  ret i32 %X35}36 37@G2 = internal global ptr null		; <ptr> [#uses=3]38 39declare noalias ptr @calloc(i32, i32) allockind("alloc,zeroed") allocsize(0,1) inaccessiblememonly40define void @calloc_init() {41; CHECK-LABEL: @calloc_init(42; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(4) ptr @calloc(i32 4, i32 1)43; CHECK-NEXT:    store ptr [[A]], ptr @G2, align 444; CHECK-NEXT:    ret void45;46  %a = call ptr @calloc(i32 4, i32 1)47  store ptr %a, ptr @G248  ret void49}50 51define i32 @calloc_test(ptr %P) {52; CHECK-LABEL: @calloc_test(53; CHECK-NEXT:    store i32 123, ptr [[P:%.*]], align 454; CHECK-NEXT:    ret i32 055;56  %g1 = load ptr, ptr @G2		; <ptr> [#uses=2]57  %h1 = load i32, ptr %g1		; <i32> [#uses=1]58  store i32 123, ptr %P59  %g2 = load ptr, ptr @G2		; <ptr> [#uses=0]60  %h2 = load i32, ptr %g1		; <i32> [#uses=1]61  %X = sub i32 %h1, %h2		; <i32> [#uses=1]62  ret i32 %X63}64 65@G3 = internal global ptr null		; <ptr> [#uses=3]66 67declare noalias ptr @my_alloc(i32)68define void @my_alloc_init() {69; CHECK-LABEL: @my_alloc_init(70; CHECK-NEXT:    [[A:%.*]] = call ptr @my_alloc(i32 4)71; CHECK-NEXT:    store ptr [[A]], ptr @G3, align 472; CHECK-NEXT:    ret void73;74  %a = call ptr @my_alloc(i32 4)75  store ptr %a, ptr @G376  ret void77}78 79define i32 @my_alloc_test(ptr %P) {80; CHECK-LABEL: @my_alloc_test(81; CHECK-NEXT:    store i32 123, ptr [[P:%.*]], align 482; CHECK-NEXT:    ret i32 083;84  %g1 = load ptr, ptr @G3		; <ptr> [#uses=2]85  %h1 = load i32, ptr %g1		; <i32> [#uses=1]86  store i32 123, ptr %P87  %g2 = load ptr, ptr @G3		; <ptr> [#uses=0]88  %h2 = load i32, ptr %g1		; <i32> [#uses=1]89  %X = sub i32 %h1, %h2		; <i32> [#uses=1]90  ret i32 %X91}92