; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes --turn off ; RUN: opt -attributor -attributor-manifest-internal -attributor-disable=false -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefix=ATTRIBUTOR target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" ; Test cases specifically designed for "align" attribute. ; We use FIXME's to indicate problems and missing attributes. ; TEST 1 ; ATTRIBUTOR: define align 8 i32* @test1(i32* nofree readnone returned align 8 "no-capture-maybe-returned" %0) define i32* @test1(i32* align 8 %0) #0 { ret i32* %0 } ; TEST 2 ; ATTRIBUTOR: define i32* @test2(i32* nofree readnone returned "no-capture-maybe-returned" %0) define i32* @test2(i32* %0) #0 { ret i32* %0 } ; TEST 3 ; ATTRIBUTOR: define align 4 i32* @test3(i32* nofree readnone align 8 "no-capture-maybe-returned" %0, i32* nofree readnone align 4 "no-capture-maybe-returned" %1, i1 %2) define i32* @test3(i32* align 8 %0, i32* align 4 %1, i1 %2) #0 { %ret = select i1 %2, i32* %0, i32* %1 ret i32* %ret } ; TEST 4 ; ATTRIBUTOR: define align 32 i32* @test4(i32* nofree readnone align 32 "no-capture-maybe-returned" %0, i32* nofree readnone align 32 "no-capture-maybe-returned" %1, i1 %2) define i32* @test4(i32* align 32 %0, i32* align 32 %1, i1 %2) #0 { %ret = select i1 %2, i32* %0, i32* %1 ret i32* %ret } ; TEST 5 declare i32* @unknown() declare align 8 i32* @align8() ; ATTRIBUTOR: define align 8 i32* @test5_1() define i32* @test5_1() { %ret = tail call align 8 i32* @unknown() ret i32* %ret } ; ATTRIBUTOR: define align 8 i32* @test5_2() define i32* @test5_2() { %ret = tail call i32* @align8() ret i32* %ret } ; TEST 6 ; SCC ; ATTRIBUTOR: define noalias nonnull align 536870912 dereferenceable(4294967295) i32* @test6_1() define i32* @test6_1() #0 { %ret = tail call i32* @test6_2() ret i32* %ret } ; ATTRIBUTOR: define noalias nonnull align 536870912 dereferenceable(4294967295) i32* @test6_2() define i32* @test6_2() #0 { %ret = tail call i32* @test6_1() ret i32* %ret } ; char a1 __attribute__((aligned(8))); ; char a2 __attribute__((aligned(16))); ; ; char* f1(char* a ){ ; return a?a:f2(&a1); ; } ; char* f2(char* a){ ; return a?f1(a):f3(&a2); ; } ; ; char* f3(char* a){ ; return a?&a1: f1(&a2); ; } @a1 = common global i8 0, align 8 @a2 = common global i8 0, align 16 ; Function Attrs: nounwind readnone ssp uwtable define internal i8* @f1(i8* readnone %0) local_unnamed_addr #0 { %2 = icmp eq i8* %0, null br i1 %2, label %3, label %5 ;