1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals 2; RUN: opt -attributor -enable-new-pm=0 -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=16 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM 3; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=16 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM 4; RUN: opt -attributor-cgscc -enable-new-pm=0 -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM 5; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM 6 7target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 8declare void @f(i32) 9declare token @llvm.call.preallocated.setup(i32) 10declare i8* @llvm.call.preallocated.arg(token, i32) 11 12@ConstAS3Ptr = addrspace(3) global i32 0, align 4 13 14;. 15; CHECK: @[[CONSTAS3PTR:[a-zA-Z0-9_$"\\.-]+]] = addrspace(3) global i32 0, align 4 16; CHECK: @[[S:[a-zA-Z0-9_$"\\.-]+]] = external global [[STRUCT_X:%.*]] 17;. 18define internal i32 addrspace(3)* @const_ptr_return_as3() { 19; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 20; IS__CGSCC____-LABEL: define {{[^@]+}}@const_ptr_return_as3 21; IS__CGSCC____-SAME: () #[[ATTR1:[0-9]+]] { 22; IS__CGSCC____-NEXT: ret i32 addrspace(3)* undef 23; 24 ret i32 addrspace(3)* @ConstAS3Ptr 25} 26define internal i32* @const_ptr_return() { 27; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 28; IS__CGSCC____-LABEL: define {{[^@]+}}@const_ptr_return 29; IS__CGSCC____-SAME: () #[[ATTR1]] { 30; IS__CGSCC____-NEXT: ret i32* undef 31; 32 ret i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*) 33} 34 35; Test1: Replace argument with constant 36define internal void @test1(i32 %a) { 37; CHECK-LABEL: define {{[^@]+}}@test1() { 38; CHECK-NEXT: tail call void @f(i32 noundef 1) 39; CHECK-NEXT: ret void 40; 41 tail call void @f(i32 %a) 42 ret void 43} 44 45define void @test1_helper() { 46; CHECK-LABEL: define {{[^@]+}}@test1_helper() { 47; CHECK-NEXT: tail call void @test1() 48; CHECK-NEXT: ret void 49; 50 tail call void @test1(i32 1) 51 ret void 52} 53 54; TEST 2 : Simplify return value 55define i32 @return0() { 56; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 57; IS__TUNIT____-LABEL: define {{[^@]+}}@return0 58; IS__TUNIT____-SAME: () #[[ATTR1:[0-9]+]] { 59; IS__TUNIT____-NEXT: ret i32 0 60; 61; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 62; IS__CGSCC____-LABEL: define {{[^@]+}}@return0 63; IS__CGSCC____-SAME: () #[[ATTR1]] { 64; IS__CGSCC____-NEXT: ret i32 0 65; 66 ret i32 0 67} 68 69define i32 @return1() { 70; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 71; IS__TUNIT____-LABEL: define {{[^@]+}}@return1 72; IS__TUNIT____-SAME: () #[[ATTR1]] { 73; IS__TUNIT____-NEXT: ret i32 1 74; 75; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 76; IS__CGSCC____-LABEL: define {{[^@]+}}@return1 77; IS__CGSCC____-SAME: () #[[ATTR1]] { 78; IS__CGSCC____-NEXT: ret i32 1 79; 80 ret i32 1 81} 82 83define i32 @test2_1(i1 %c) { 84; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 85; IS__TUNIT____-LABEL: define {{[^@]+}}@test2_1 86; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 87; IS__TUNIT____-NEXT: br i1 [[C]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] 88; IS__TUNIT____: if.true: 89; IS__TUNIT____-NEXT: [[RET0:%.*]] = add i32 0, 1 90; IS__TUNIT____-NEXT: br label [[END:%.*]] 91; IS__TUNIT____: if.false: 92; IS__TUNIT____-NEXT: br label [[END]] 93; IS__TUNIT____: end: 94; IS__TUNIT____-NEXT: [[RET:%.*]] = phi i32 [ [[RET0]], [[IF_TRUE]] ], [ 1, [[IF_FALSE]] ] 95; IS__TUNIT____-NEXT: ret i32 1 96; 97; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 98; IS__CGSCC____-LABEL: define {{[^@]+}}@test2_1 99; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 100; IS__CGSCC____-NEXT: br i1 [[C]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] 101; IS__CGSCC____: if.true: 102; IS__CGSCC____-NEXT: [[RET0:%.*]] = add i32 0, 1 103; IS__CGSCC____-NEXT: br label [[END:%.*]] 104; IS__CGSCC____: if.false: 105; IS__CGSCC____-NEXT: br label [[END]] 106; IS__CGSCC____: end: 107; IS__CGSCC____-NEXT: [[RET:%.*]] = phi i32 [ [[RET0]], [[IF_TRUE]] ], [ 1, [[IF_FALSE]] ] 108; IS__CGSCC____-NEXT: ret i32 1 109; 110 br i1 %c, label %if.true, label %if.false 111if.true: 112 %call = tail call i32 @return0() 113 %ret0 = add i32 %call, 1 114 br label %end 115if.false: 116 %ret1 = tail call i32 @return1() 117 br label %end 118end: 119 120 %ret = phi i32 [ %ret0, %if.true ], [ %ret1, %if.false ] 121 122 ret i32 1 123} 124 125 126 127define i32 @test2_2(i1 %c) { 128; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 129; IS__TUNIT____-LABEL: define {{[^@]+}}@test2_2 130; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 131; IS__TUNIT____-NEXT: ret i32 1 132; 133; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 134; IS__CGSCC____-LABEL: define {{[^@]+}}@test2_2 135; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 136; IS__CGSCC____-NEXT: ret i32 1 137; 138 %ret = tail call i32 @test2_1(i1 %c) 139 ret i32 %ret 140} 141 142declare void @use(i32) 143define void @test3(i1 %c) { 144; CHECK-LABEL: define {{[^@]+}}@test3 145; CHECK-SAME: (i1 [[C:%.*]]) { 146; CHECK-NEXT: br i1 [[C]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] 147; CHECK: if.true: 148; CHECK-NEXT: br label [[END:%.*]] 149; CHECK: if.false: 150; CHECK-NEXT: br label [[END]] 151; CHECK: end: 152; CHECK-NEXT: [[R:%.*]] = phi i32 [ 1, [[IF_TRUE]] ], [ 1, [[IF_FALSE]] ] 153; CHECK-NEXT: tail call void @use(i32 noundef 1) 154; CHECK-NEXT: ret void 155; 156 br i1 %c, label %if.true, label %if.false 157if.true: 158 br label %end 159if.false: 160 %ret1 = tail call i32 @return1() 161 br label %end 162end: 163 164 %r = phi i32 [ 1, %if.true ], [ %ret1, %if.false ] 165 166 tail call void @use(i32 %r) 167 ret void 168} 169 170define void @test-select-phi(i1 %c) { 171; CHECK-LABEL: define {{[^@]+}}@test-select-phi 172; CHECK-SAME: (i1 [[C:%.*]]) { 173; CHECK-NEXT: tail call void @use(i32 noundef 1) 174; CHECK-NEXT: [[SELECT_NOT_SAME:%.*]] = select i1 [[C]], i32 1, i32 0 175; CHECK-NEXT: tail call void @use(i32 noundef [[SELECT_NOT_SAME]]) 176; CHECK-NEXT: br i1 [[C]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] 177; CHECK: if-true: 178; CHECK-NEXT: br label [[END:%.*]] 179; CHECK: if-false: 180; CHECK-NEXT: br label [[END]] 181; CHECK: end: 182; CHECK-NEXT: [[PHI_SAME:%.*]] = phi i32 [ 1, [[IF_TRUE]] ], [ 1, [[IF_FALSE]] ] 183; CHECK-NEXT: [[PHI_NOT_SAME:%.*]] = phi i32 [ 0, [[IF_TRUE]] ], [ 1, [[IF_FALSE]] ] 184; CHECK-NEXT: [[PHI_SAME_PROP:%.*]] = phi i32 [ 1, [[IF_TRUE]] ], [ 1, [[IF_FALSE]] ] 185; CHECK-NEXT: [[PHI_SAME_UNDEF:%.*]] = phi i32 [ 1, [[IF_TRUE]] ], [ undef, [[IF_FALSE]] ] 186; CHECK-NEXT: [[SELECT_NOT_SAME_UNDEF:%.*]] = select i1 [[C]], i32 [[PHI_NOT_SAME]], i32 undef 187; CHECK-NEXT: tail call void @use(i32 noundef 1) 188; CHECK-NEXT: tail call void @use(i32 noundef [[PHI_NOT_SAME]]) 189; CHECK-NEXT: tail call void @use(i32 noundef 1) 190; CHECK-NEXT: tail call void @use(i32 1) 191; CHECK-NEXT: tail call void @use(i32 [[SELECT_NOT_SAME_UNDEF]]) 192; CHECK-NEXT: ret void 193; 194 %select-same = select i1 %c, i32 1, i32 1 195 tail call void @use(i32 %select-same) 196 197 %select-not-same = select i1 %c, i32 1, i32 0 198 tail call void @use(i32 %select-not-same) 199 br i1 %c, label %if-true, label %if-false 200if-true: 201 br label %end 202if-false: 203 br label %end 204end: 205 %phi-same = phi i32 [ 1, %if-true ], [ 1, %if-false ] 206 %phi-not-same = phi i32 [ 0, %if-true ], [ 1, %if-false ] 207 %phi-same-prop = phi i32 [ 1, %if-true ], [ %select-same, %if-false ] 208 %phi-same-undef = phi i32 [ 1, %if-true ], [ undef, %if-false ] 209 %select-not-same-undef = select i1 %c, i32 %phi-not-same, i32 undef 210 211 212 tail call void @use(i32 %phi-same) 213 214 tail call void @use(i32 %phi-not-same) 215 216 tail call void @use(i32 %phi-same-prop) 217 218 tail call void @use(i32 %phi-same-undef) 219 220 tail call void @use(i32 %select-not-same-undef) 221 222 ret void 223 224} 225 226define i32 @ipccp1(i32 %a) { 227; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 228; IS__TUNIT____-LABEL: define {{[^@]+}}@ipccp1 229; IS__TUNIT____-SAME: (i32 returned [[A:%.*]]) #[[ATTR1]] { 230; IS__TUNIT____-NEXT: br i1 true, label [[T:%.*]], label [[F:%.*]] 231; IS__TUNIT____: t: 232; IS__TUNIT____-NEXT: ret i32 [[A]] 233; IS__TUNIT____: f: 234; IS__TUNIT____-NEXT: unreachable 235; 236; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 237; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp1 238; IS__CGSCC____-SAME: (i32 returned [[A:%.*]]) #[[ATTR1]] { 239; IS__CGSCC____-NEXT: br i1 true, label [[T:%.*]], label [[F:%.*]] 240; IS__CGSCC____: t: 241; IS__CGSCC____-NEXT: ret i32 [[A]] 242; IS__CGSCC____: f: 243; IS__CGSCC____-NEXT: unreachable 244; 245 br i1 true, label %t, label %f 246t: 247 ret i32 %a 248f: 249 %r = call i32 @ipccp1(i32 5) 250 ret i32 %r 251} 252 253define internal i1 @ipccp2i(i1 %a) { 254; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 255; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp2i 256; IS__CGSCC____-SAME: () #[[ATTR1]] { 257; IS__CGSCC____-NEXT: br label [[T:%.*]] 258; IS__CGSCC____: t: 259; IS__CGSCC____-NEXT: ret i1 undef 260; IS__CGSCC____: f: 261; IS__CGSCC____-NEXT: unreachable 262; 263 br i1 %a, label %t, label %f 264t: 265 ret i1 %a 266f: 267 %r = call i1 @ipccp2i(i1 false) 268 ret i1 %r 269} 270 271define i1 @ipccp2() { 272; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 273; IS__TUNIT____-LABEL: define {{[^@]+}}@ipccp2 274; IS__TUNIT____-SAME: () #[[ATTR1]] { 275; IS__TUNIT____-NEXT: ret i1 true 276; 277; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 278; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp2 279; IS__CGSCC____-SAME: () #[[ATTR1]] { 280; IS__CGSCC____-NEXT: ret i1 true 281; 282 %r = call i1 @ipccp2i(i1 true) 283 ret i1 %r 284} 285 286define internal i1 @ipccp2ib(i1 %a) { 287; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 288; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp2ib 289; IS__CGSCC____-SAME: () #[[ATTR1]] { 290; IS__CGSCC____-NEXT: br label [[T:%.*]] 291; IS__CGSCC____: t: 292; IS__CGSCC____-NEXT: ret i1 undef 293; IS__CGSCC____: f: 294; IS__CGSCC____-NEXT: unreachable 295; 296 br i1 %a, label %t, label %f 297t: 298 ret i1 true 299f: 300 %r = call i1 @ipccp2ib(i1 false) 301 ret i1 %r 302} 303 304define i1 @ipccp2b() { 305; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 306; IS__TUNIT____-LABEL: define {{[^@]+}}@ipccp2b 307; IS__TUNIT____-SAME: () #[[ATTR1]] { 308; IS__TUNIT____-NEXT: ret i1 true 309; 310; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 311; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp2b 312; IS__CGSCC____-SAME: () #[[ATTR1]] { 313; IS__CGSCC____-NEXT: ret i1 true 314; 315 %r = call i1 @ipccp2ib(i1 true) 316 ret i1 %r 317} 318 319define internal i32 @ipccp3i(i32 %a) { 320; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 321; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp3i 322; IS__CGSCC____-SAME: () #[[ATTR1]] { 323; IS__CGSCC____-NEXT: br label [[T:%.*]] 324; IS__CGSCC____: t: 325; IS__CGSCC____-NEXT: ret i32 undef 326; IS__CGSCC____: f: 327; IS__CGSCC____-NEXT: unreachable 328; 329 %c = icmp eq i32 %a, 7 330 br i1 %c, label %t, label %f 331t: 332 ret i32 %a 333f: 334 %r = call i32 @ipccp3i(i32 5) 335 ret i32 %r 336} 337 338define i32 @ipccp3() { 339; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 340; IS__TUNIT____-LABEL: define {{[^@]+}}@ipccp3 341; IS__TUNIT____-SAME: () #[[ATTR1]] { 342; IS__TUNIT____-NEXT: ret i32 7 343; 344; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 345; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp3 346; IS__CGSCC____-SAME: () #[[ATTR1]] { 347; IS__CGSCC____-NEXT: ret i32 7 348; 349 %r = call i32 @ipccp3i(i32 7) 350 ret i32 %r 351} 352 353define internal i32 @ipccp4ia(i1 %c) { 354; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 355; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp4ia 356; IS__CGSCC____-SAME: () #[[ATTR1]] { 357; IS__CGSCC____-NEXT: br label [[T:%.*]] 358; IS__CGSCC____: t: 359; IS__CGSCC____-NEXT: ret i32 undef 360; IS__CGSCC____: f: 361; IS__CGSCC____-NEXT: unreachable 362; 363 br i1 %c, label %t, label %f 364t: 365 ret i32 0 366f: 367 ret i32 1 368} 369define internal i32 @ipccp4ib(i32 %a) { 370; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 371; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp4ib 372; IS__CGSCC____-SAME: () #[[ATTR1]] { 373; IS__CGSCC____-NEXT: [[C:%.*]] = icmp eq i32 7, 7 374; IS__CGSCC____-NEXT: br i1 true, label [[T:%.*]], label [[F:%.*]] 375; IS__CGSCC____: t: 376; IS__CGSCC____-NEXT: ret i32 undef 377; IS__CGSCC____: f: 378; IS__CGSCC____-NEXT: unreachable 379; 380 %c = icmp eq i32 %a, 7 381 br i1 %c, label %t, label %f 382t: 383 %r = call i32 @ipccp4ia(i1 %c) 384 ret i32 %r 385f: 386 ret i32 1 387} 388 389define i32 @ipccp4(i1 %c) { 390; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone 391; IS__TUNIT____-LABEL: define {{[^@]+}}@ipccp4 392; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR2:[0-9]+]] { 393; IS__TUNIT____-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]] 394; IS__TUNIT____: t: 395; IS__TUNIT____-NEXT: br label [[F]] 396; IS__TUNIT____: f: 397; IS__TUNIT____-NEXT: ret i32 0 398; 399; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 400; IS__CGSCC____-LABEL: define {{[^@]+}}@ipccp4 401; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 402; IS__CGSCC____-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]] 403; IS__CGSCC____: t: 404; IS__CGSCC____-NEXT: br label [[F]] 405; IS__CGSCC____: f: 406; IS__CGSCC____-NEXT: ret i32 0 407; 408 br i1 %c, label %t, label %f 409t: 410 %q = call i32 @ipccp4ia(i1 undef) 411 br label %f 412f: 413 %r = call i32 @ipccp4ib(i32 7) 414 ret i32 %r 415} 416 417; Do not touch complicated arguments (for now) 418%struct.X = type { i8* } 419define internal i32* @test_inalloca(i32* inalloca(i32) %a) { 420; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 421; IS__TUNIT____-LABEL: define {{[^@]+}}@test_inalloca 422; IS__TUNIT____-SAME: (i32* noalias nofree nonnull returned writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] { 423; IS__TUNIT____-NEXT: ret i32* [[A]] 424; 425; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 426; IS__CGSCC____-LABEL: define {{[^@]+}}@test_inalloca 427; IS__CGSCC____-SAME: (i32* noalias nofree noundef nonnull returned writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] { 428; IS__CGSCC____-NEXT: ret i32* [[A]] 429; 430 ret i32* %a 431} 432define i32* @complicated_args_inalloca(i32* %arg) { 433; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 434; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_inalloca 435; IS__TUNIT____-SAME: (i32* nofree readnone returned "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] { 436; IS__TUNIT____-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR1]] 437; IS__TUNIT____-NEXT: ret i32* [[CALL]] 438; 439; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 440; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_inalloca 441; IS__CGSCC_OPM-SAME: (i32* nofree noundef nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] { 442; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[ARG]]) #[[ATTR8:[0-9]+]] 443; IS__CGSCC_OPM-NEXT: ret i32* [[CALL]] 444; 445; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 446; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_inalloca 447; IS__CGSCC_NPM-SAME: (i32* nofree noundef nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] { 448; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[ARG]]) #[[ATTR7:[0-9]+]] 449; IS__CGSCC_NPM-NEXT: ret i32* [[CALL]] 450; 451 %call = call i32* @test_inalloca(i32* inalloca(i32) %arg) 452 ret i32* %call 453} 454 455define internal i32* @test_preallocated(i32* preallocated(i32) %a) { 456; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 457; IS__TUNIT____-LABEL: define {{[^@]+}}@test_preallocated 458; IS__TUNIT____-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 536870912 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] { 459; IS__TUNIT____-NEXT: ret i32* [[A]] 460; 461; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 462; IS__CGSCC____-LABEL: define {{[^@]+}}@test_preallocated 463; IS__CGSCC____-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 536870912 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] { 464; IS__CGSCC____-NEXT: ret i32* [[A]] 465; 466 ret i32* %a 467} 468define i32* @complicated_args_preallocated() { 469; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn 470; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_preallocated 471; IS__TUNIT_OPM-SAME: () #[[ATTR0:[0-9]+]] { 472; IS__TUNIT_OPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR7:[0-9]+]] 473; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 536870912 null) #[[ATTR1]] [ "preallocated"(token [[C]]) ] 474; IS__TUNIT_OPM-NEXT: ret i32* [[CALL]] 475; 476; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn 477; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_preallocated 478; IS__TUNIT_NPM-SAME: () #[[ATTR0:[0-9]+]] { 479; IS__TUNIT_NPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR6:[0-9]+]] 480; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 536870912 null) #[[ATTR1]] [ "preallocated"(token [[C]]) ] 481; IS__TUNIT_NPM-NEXT: ret i32* [[CALL]] 482; 483; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind willreturn 484; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_preallocated 485; IS__CGSCC_OPM-SAME: () #[[ATTR0:[0-9]+]] { 486; IS__CGSCC_OPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR9:[0-9]+]] 487; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 536870912 null) #[[ATTR10:[0-9]+]] [ "preallocated"(token [[C]]) ] 488; IS__CGSCC_OPM-NEXT: ret i32* [[CALL]] 489; 490; IS__CGSCC_NPM: Function Attrs: nofree nosync nounwind willreturn 491; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_preallocated 492; IS__CGSCC_NPM-SAME: () #[[ATTR0:[0-9]+]] { 493; IS__CGSCC_NPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR8:[0-9]+]] 494; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 536870912 null) #[[ATTR9:[0-9]+]] [ "preallocated"(token [[C]]) ] 495; IS__CGSCC_NPM-NEXT: ret i32* [[CALL]] 496; 497 %c = call token @llvm.call.preallocated.setup(i32 1) 498 %call = call i32* @test_preallocated(i32* preallocated(i32) null) ["preallocated"(token %c)] 499 ret i32* %call 500} 501 502define internal void @test_sret(%struct.X* sret(%struct.X) %a, %struct.X** %b) { 503; 504; IS__TUNIT____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly 505; IS__TUNIT____-LABEL: define {{[^@]+}}@test_sret 506; IS__TUNIT____-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 536870912 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR3:[0-9]+]] { 507; IS__TUNIT____-NEXT: store %struct.X* [[A]], %struct.X** [[B]], align 8 508; IS__TUNIT____-NEXT: ret void 509; 510; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly 511; IS__CGSCC____-LABEL: define {{[^@]+}}@test_sret 512; IS__CGSCC____-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 536870912 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] { 513; IS__CGSCC____-NEXT: store %struct.X* [[A]], %struct.X** [[B]], align 8 514; IS__CGSCC____-NEXT: ret void 515; 516 store %struct.X* %a, %struct.X** %b 517 ret void 518} 519; FIXME: Alignment and dereferenceability are not propagated to the argument 520define void @complicated_args_sret(%struct.X** %b) { 521; 522; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly 523; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_sret 524; IS__TUNIT_OPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR3]] { 525; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR6:[0-9]+]] 526; IS__TUNIT_OPM-NEXT: ret void 527; 528; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly 529; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_sret 530; IS__TUNIT_NPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR3]] { 531; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR5:[0-9]+]] 532; IS__TUNIT_NPM-NEXT: ret void 533; 534; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly 535; IS__CGSCC____-LABEL: define {{[^@]+}}@complicated_args_sret 536; IS__CGSCC____-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2]] { 537; IS__CGSCC____-NEXT: unreachable 538; 539 call void @test_sret(%struct.X* sret(%struct.X) null, %struct.X** %b) 540 ret void 541} 542 543define internal %struct.X* @test_nest(%struct.X* nest %a) { 544; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 545; IS__TUNIT____-LABEL: define {{[^@]+}}@test_nest 546; IS__TUNIT____-SAME: (%struct.X* nest noalias nofree noundef readnone returned align 536870912 "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] { 547; IS__TUNIT____-NEXT: ret %struct.X* [[A]] 548; 549; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 550; IS__CGSCC____-LABEL: define {{[^@]+}}@test_nest 551; IS__CGSCC____-SAME: (%struct.X* nest noalias nofree noundef readnone returned align 536870912 "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] { 552; IS__CGSCC____-NEXT: ret %struct.X* [[A]] 553; 554 ret %struct.X* %a 555} 556define %struct.X* @complicated_args_nest() { 557; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 558; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_nest 559; IS__TUNIT____-SAME: () #[[ATTR1]] { 560; IS__TUNIT____-NEXT: [[CALL:%.*]] = call %struct.X* @test_nest(%struct.X* noalias nocapture nofree noundef readnone align 536870912 null) #[[ATTR1]] 561; IS__TUNIT____-NEXT: ret %struct.X* [[CALL]] 562; 563; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 564; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_nest 565; IS__CGSCC_OPM-SAME: () #[[ATTR1]] { 566; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call %struct.X* @test_nest(%struct.X* noalias nocapture nofree noundef readnone align 536870912 null) #[[ATTR8]] 567; IS__CGSCC_OPM-NEXT: ret %struct.X* [[CALL]] 568; 569; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 570; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_nest 571; IS__CGSCC_NPM-SAME: () #[[ATTR1]] { 572; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call %struct.X* @test_nest(%struct.X* noalias nocapture nofree noundef readnone align 536870912 null) #[[ATTR7]] 573; IS__CGSCC_NPM-NEXT: ret %struct.X* [[CALL]] 574; 575 %call = call %struct.X* @test_nest(%struct.X* null) 576 ret %struct.X* %call 577} 578 579@S = external global %struct.X 580define internal void @test_byval(%struct.X* byval(%struct.X) %a) { 581; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 582; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@test_byval 583; IS__CGSCC_OPM-SAME: (%struct.X* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR1]] { 584; IS__CGSCC_OPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A]], i32 0, i32 0 585; IS__CGSCC_OPM-NEXT: store i8* null, i8** [[G0]], align 8 586; IS__CGSCC_OPM-NEXT: ret void 587; 588; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 589; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test_byval 590; IS__CGSCC_NPM-SAME: (i8* noalias nocapture nofree readnone [[TMP0:%.*]]) #[[ATTR1]] { 591; IS__CGSCC_NPM-NEXT: [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8 592; IS__CGSCC_NPM-NEXT: [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8** 593; IS__CGSCC_NPM-NEXT: store i8* [[TMP0]], i8** [[A_PRIV_CAST]], align 8 594; IS__CGSCC_NPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0 595; IS__CGSCC_NPM-NEXT: store i8* null, i8** [[G0]], align 8 596; IS__CGSCC_NPM-NEXT: ret void 597; 598 %g0 = getelementptr %struct.X, %struct.X* %a, i32 0, i32 0 599 store i8* null, i8** %g0 600 ret void 601} 602define void @complicated_args_byval() { 603; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 604; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_byval 605; IS__TUNIT____-SAME: () #[[ATTR1]] { 606; IS__TUNIT____-NEXT: ret void 607; 608; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 609; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_byval 610; IS__CGSCC_OPM-SAME: () #[[ATTR1]] { 611; IS__CGSCC_OPM-NEXT: ret void 612; 613; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readonly willreturn 614; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_byval 615; IS__CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] { 616; IS__CGSCC_NPM-NEXT: ret void 617; 618 call void @test_byval(%struct.X* byval(%struct.X) @S) 619 ret void 620} 621 622define internal i8*@test_byval2(%struct.X* byval(%struct.X) %a) { 623; IS__TUNIT____: Function Attrs: nofree nosync nounwind readonly willreturn 624; IS__TUNIT____-LABEL: define {{[^@]+}}@test_byval2 625; IS__TUNIT____-SAME: () #[[ATTR4:[0-9]+]] { 626; IS__TUNIT____-NEXT: [[L:%.*]] = load i8*, i8** getelementptr inbounds ([[STRUCT_X:%.*]], %struct.X* @S, i32 0, i32 0), align 8 627; IS__TUNIT____-NEXT: ret i8* [[L]] 628; 629; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readonly willreturn 630; IS__CGSCC____-LABEL: define {{[^@]+}}@test_byval2 631; IS__CGSCC____-SAME: () #[[ATTR3:[0-9]+]] { 632; IS__CGSCC____-NEXT: [[L:%.*]] = load i8*, i8** getelementptr inbounds ([[STRUCT_X:%.*]], %struct.X* @S, i32 0, i32 0), align 8 633; IS__CGSCC____-NEXT: ret i8* [[L]] 634; 635 %g0 = getelementptr %struct.X, %struct.X* %a, i32 0, i32 0 636 %l = load i8*, i8** %g0 637 ret i8* %l 638} 639define i8* @complicated_args_byval2() { 640; IS__TUNIT____: Function Attrs: nofree nosync nounwind readonly willreturn 641; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_byval2 642; IS__TUNIT____-SAME: () #[[ATTR4]] { 643; IS__TUNIT____-NEXT: [[C:%.*]] = call i8* @test_byval2() #[[ATTR4]] 644; IS__TUNIT____-NEXT: ret i8* [[C]] 645; 646; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readonly willreturn 647; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_byval2 648; IS__CGSCC_OPM-SAME: () #[[ATTR3]] { 649; IS__CGSCC_OPM-NEXT: [[C:%.*]] = call i8* @test_byval2() #[[ATTR11:[0-9]+]] 650; IS__CGSCC_OPM-NEXT: ret i8* [[C]] 651; 652; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readonly willreturn 653; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_byval2 654; IS__CGSCC_NPM-SAME: () #[[ATTR3]] { 655; IS__CGSCC_NPM-NEXT: [[C:%.*]] = call i8* @test_byval2() #[[ATTR10:[0-9]+]] 656; IS__CGSCC_NPM-NEXT: ret i8* [[C]] 657; 658 %c = call i8* @test_byval2(%struct.X* byval(%struct.X) @S) 659 ret i8* %c 660} 661 662define void @fixpoint_changed(i32* %p) { 663; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind writeonly 664; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@fixpoint_changed 665; IS__TUNIT_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR5:[0-9]+]] { 666; IS__TUNIT_OPM-NEXT: entry: 667; IS__TUNIT_OPM-NEXT: br label [[FOR_COND:%.*]] 668; IS__TUNIT_OPM: for.cond: 669; IS__TUNIT_OPM-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ] 670; IS__TUNIT_OPM-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30 671; IS__TUNIT_OPM-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 672; IS__TUNIT_OPM: for.body: 673; IS__TUNIT_OPM-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [ 674; IS__TUNIT_OPM-NEXT: i32 1, label [[SW_BB:%.*]] 675; IS__TUNIT_OPM-NEXT: ] 676; IS__TUNIT_OPM: sw.bb: 677; IS__TUNIT_OPM-NEXT: br label [[SW_EPILOG]] 678; IS__TUNIT_OPM: sw.epilog: 679; IS__TUNIT_OPM-NEXT: [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ] 680; IS__TUNIT_OPM-NEXT: store i32 [[X_0]], i32* [[P]], align 4 681; IS__TUNIT_OPM-NEXT: [[INC]] = add nsw i32 [[J_0]], 1 682; IS__TUNIT_OPM-NEXT: br label [[FOR_COND]] 683; IS__TUNIT_OPM: for.end: 684; IS__TUNIT_OPM-NEXT: ret void 685; 686; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly 687; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@fixpoint_changed 688; IS__TUNIT_NPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] { 689; IS__TUNIT_NPM-NEXT: entry: 690; IS__TUNIT_NPM-NEXT: br label [[FOR_COND:%.*]] 691; IS__TUNIT_NPM: for.cond: 692; IS__TUNIT_NPM-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ] 693; IS__TUNIT_NPM-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30 694; IS__TUNIT_NPM-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 695; IS__TUNIT_NPM: for.body: 696; IS__TUNIT_NPM-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [ 697; IS__TUNIT_NPM-NEXT: i32 1, label [[SW_BB:%.*]] 698; IS__TUNIT_NPM-NEXT: ] 699; IS__TUNIT_NPM: sw.bb: 700; IS__TUNIT_NPM-NEXT: br label [[SW_EPILOG]] 701; IS__TUNIT_NPM: sw.epilog: 702; IS__TUNIT_NPM-NEXT: [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ] 703; IS__TUNIT_NPM-NEXT: store i32 [[X_0]], i32* [[P]], align 4 704; IS__TUNIT_NPM-NEXT: [[INC]] = add nsw i32 [[J_0]], 1 705; IS__TUNIT_NPM-NEXT: br label [[FOR_COND]] 706; IS__TUNIT_NPM: for.end: 707; IS__TUNIT_NPM-NEXT: ret void 708; 709; IS__CGSCC_OPM: Function Attrs: argmemonly nofree norecurse nosync nounwind writeonly 710; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@fixpoint_changed 711; IS__CGSCC_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR4:[0-9]+]] { 712; IS__CGSCC_OPM-NEXT: entry: 713; IS__CGSCC_OPM-NEXT: br label [[FOR_COND:%.*]] 714; IS__CGSCC_OPM: for.cond: 715; IS__CGSCC_OPM-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ] 716; IS__CGSCC_OPM-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30 717; IS__CGSCC_OPM-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 718; IS__CGSCC_OPM: for.body: 719; IS__CGSCC_OPM-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [ 720; IS__CGSCC_OPM-NEXT: i32 1, label [[SW_BB:%.*]] 721; IS__CGSCC_OPM-NEXT: ] 722; IS__CGSCC_OPM: sw.bb: 723; IS__CGSCC_OPM-NEXT: br label [[SW_EPILOG]] 724; IS__CGSCC_OPM: sw.epilog: 725; IS__CGSCC_OPM-NEXT: [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ] 726; IS__CGSCC_OPM-NEXT: store i32 [[X_0]], i32* [[P]], align 4 727; IS__CGSCC_OPM-NEXT: [[INC]] = add nsw i32 [[J_0]], 1 728; IS__CGSCC_OPM-NEXT: br label [[FOR_COND]] 729; IS__CGSCC_OPM: for.end: 730; IS__CGSCC_OPM-NEXT: ret void 731; 732; IS__CGSCC_NPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly 733; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@fixpoint_changed 734; IS__CGSCC_NPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR2]] { 735; IS__CGSCC_NPM-NEXT: entry: 736; IS__CGSCC_NPM-NEXT: br label [[FOR_COND:%.*]] 737; IS__CGSCC_NPM: for.cond: 738; IS__CGSCC_NPM-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ] 739; IS__CGSCC_NPM-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30 740; IS__CGSCC_NPM-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 741; IS__CGSCC_NPM: for.body: 742; IS__CGSCC_NPM-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [ 743; IS__CGSCC_NPM-NEXT: i32 1, label [[SW_BB:%.*]] 744; IS__CGSCC_NPM-NEXT: ] 745; IS__CGSCC_NPM: sw.bb: 746; IS__CGSCC_NPM-NEXT: br label [[SW_EPILOG]] 747; IS__CGSCC_NPM: sw.epilog: 748; IS__CGSCC_NPM-NEXT: [[X_0:%.*]] = phi i32 [ 255, [[FOR_BODY]] ], [ 253, [[SW_BB]] ] 749; IS__CGSCC_NPM-NEXT: store i32 [[X_0]], i32* [[P]], align 4 750; IS__CGSCC_NPM-NEXT: [[INC]] = add nsw i32 [[J_0]], 1 751; IS__CGSCC_NPM-NEXT: br label [[FOR_COND]] 752; IS__CGSCC_NPM: for.end: 753; IS__CGSCC_NPM-NEXT: ret void 754; 755entry: 756 br label %for.cond 757 758for.cond: 759 %j.0 = phi i32 [ 0, %entry ], [ %inc, %sw.epilog ] 760 %cmp = icmp slt i32 %j.0, 30 761 br i1 %cmp, label %for.body, label %for.end 762 763for.body: 764 switch i32 %j.0, label %sw.epilog [ 765 i32 1, label %sw.bb 766 ] 767 768sw.bb: 769 br label %sw.epilog 770 771sw.epilog: 772 %x.0 = phi i32 [ 255, %for.body ], [ 253, %sw.bb ] 773 store i32 %x.0, i32* %p 774 %inc = add nsw i32 %j.0, 1 775 br label %for.cond 776 777for.end: 778 ret void 779} 780 781; Check we merge undef and a constant properly. 782define i8 @caller0() { 783; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 784; IS__TUNIT____-LABEL: define {{[^@]+}}@caller0 785; IS__TUNIT____-SAME: () #[[ATTR1]] { 786; IS__TUNIT____-NEXT: ret i8 49 787; 788; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 789; IS__CGSCC____-LABEL: define {{[^@]+}}@caller0 790; IS__CGSCC____-SAME: () #[[ATTR1]] { 791; IS__CGSCC____-NEXT: ret i8 49 792; 793 %c = call i8 @callee(i8 undef) 794 ret i8 %c 795} 796define i8 @caller1() { 797; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 798; IS__TUNIT____-LABEL: define {{[^@]+}}@caller1 799; IS__TUNIT____-SAME: () #[[ATTR1]] { 800; IS__TUNIT____-NEXT: ret i8 49 801; 802; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 803; IS__CGSCC____-LABEL: define {{[^@]+}}@caller1 804; IS__CGSCC____-SAME: () #[[ATTR1]] { 805; IS__CGSCC____-NEXT: ret i8 49 806; 807 %c = call i8 @callee(i8 undef) 808 ret i8 %c 809} 810define i8 @caller2() { 811; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 812; IS__TUNIT____-LABEL: define {{[^@]+}}@caller2 813; IS__TUNIT____-SAME: () #[[ATTR1]] { 814; IS__TUNIT____-NEXT: ret i8 49 815; 816; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 817; IS__CGSCC____-LABEL: define {{[^@]+}}@caller2 818; IS__CGSCC____-SAME: () #[[ATTR1]] { 819; IS__CGSCC____-NEXT: ret i8 49 820; 821 %c = call i8 @callee(i8 undef) 822 ret i8 %c 823} 824define i8 @caller_middle() { 825; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 826; IS__TUNIT____-LABEL: define {{[^@]+}}@caller_middle 827; IS__TUNIT____-SAME: () #[[ATTR1]] { 828; IS__TUNIT____-NEXT: ret i8 49 829; 830; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 831; IS__CGSCC____-LABEL: define {{[^@]+}}@caller_middle 832; IS__CGSCC____-SAME: () #[[ATTR1]] { 833; IS__CGSCC____-NEXT: ret i8 49 834; 835 %c = call i8 @callee(i8 42) 836 ret i8 %c 837} 838define i8 @caller3() { 839; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 840; IS__TUNIT____-LABEL: define {{[^@]+}}@caller3 841; IS__TUNIT____-SAME: () #[[ATTR1]] { 842; IS__TUNIT____-NEXT: ret i8 49 843; 844; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 845; IS__CGSCC____-LABEL: define {{[^@]+}}@caller3 846; IS__CGSCC____-SAME: () #[[ATTR1]] { 847; IS__CGSCC____-NEXT: ret i8 49 848; 849 %c = call i8 @callee(i8 undef) 850 ret i8 %c 851} 852define i8 @caller4() { 853; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 854; IS__TUNIT____-LABEL: define {{[^@]+}}@caller4 855; IS__TUNIT____-SAME: () #[[ATTR1]] { 856; IS__TUNIT____-NEXT: ret i8 49 857; 858; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 859; IS__CGSCC____-LABEL: define {{[^@]+}}@caller4 860; IS__CGSCC____-SAME: () #[[ATTR1]] { 861; IS__CGSCC____-NEXT: ret i8 49 862; 863 %c = call i8 @callee(i8 undef) 864 ret i8 %c 865} 866define internal i8 @callee(i8 %a) { 867; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 868; IS__CGSCC____-LABEL: define {{[^@]+}}@callee 869; IS__CGSCC____-SAME: () #[[ATTR1]] { 870; IS__CGSCC____-NEXT: ret i8 undef 871; 872 %c = add i8 %a, 7 873 ret i8 %c 874} 875 876define void @user_as3() { 877; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn writeonly 878; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@user_as3 879; IS__TUNIT_OPM-SAME: () #[[ATTR6]] { 880; IS__TUNIT_OPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 881; IS__TUNIT_OPM-NEXT: ret void 882; 883; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn writeonly 884; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@user_as3 885; IS__TUNIT_NPM-SAME: () #[[ATTR5]] { 886; IS__TUNIT_NPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 887; IS__TUNIT_NPM-NEXT: ret void 888; 889; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly 890; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@user_as3 891; IS__CGSCC_OPM-SAME: () #[[ATTR5:[0-9]+]] { 892; IS__CGSCC_OPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 893; IS__CGSCC_OPM-NEXT: ret void 894; 895; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly 896; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@user_as3 897; IS__CGSCC_NPM-SAME: () #[[ATTR4:[0-9]+]] { 898; IS__CGSCC_NPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 899; IS__CGSCC_NPM-NEXT: ret void 900; 901 %call = call fastcc i32 addrspace(3)* @const_ptr_return_as3() 902 store i32 0, i32 addrspace(3)* %call 903 ret void 904} 905define void @user() { 906; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn writeonly 907; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@user 908; IS__TUNIT_OPM-SAME: () #[[ATTR6]] { 909; IS__TUNIT_OPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 910; IS__TUNIT_OPM-NEXT: ret void 911; 912; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn writeonly 913; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@user 914; IS__TUNIT_NPM-SAME: () #[[ATTR5]] { 915; IS__TUNIT_NPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 916; IS__TUNIT_NPM-NEXT: ret void 917; 918; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly 919; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@user 920; IS__CGSCC_OPM-SAME: () #[[ATTR5]] { 921; IS__CGSCC_OPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 922; IS__CGSCC_OPM-NEXT: ret void 923; 924; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly 925; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@user 926; IS__CGSCC_NPM-SAME: () #[[ATTR4]] { 927; IS__CGSCC_NPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 928; IS__CGSCC_NPM-NEXT: ret void 929; 930 %call = call fastcc i32* @const_ptr_return() 931 store i32 0, i32* %call 932 ret void 933} 934 935 936define i1 @test_merge_with_undef_values_ptr(i1 %c) { 937; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone 938; IS__TUNIT____-LABEL: define {{[^@]+}}@test_merge_with_undef_values_ptr 939; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR2]] { 940; IS__TUNIT____-NEXT: [[R1:%.*]] = call i1 @undef_then_null(i1 [[C]]) #[[ATTR2]] 941; IS__TUNIT____-NEXT: ret i1 [[R1]] 942; 943; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind readnone 944; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@test_merge_with_undef_values_ptr 945; IS__CGSCC_OPM-SAME: (i1 [[C:%.*]]) #[[ATTR6:[0-9]+]] { 946; IS__CGSCC_OPM-NEXT: [[R1:%.*]] = call noundef i1 @undef_then_null(i1 [[C]]) #[[ATTR12:[0-9]+]] 947; IS__CGSCC_OPM-NEXT: ret i1 [[R1]] 948; 949; IS__CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone 950; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test_merge_with_undef_values_ptr 951; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR5:[0-9]+]] { 952; IS__CGSCC_NPM-NEXT: [[R1:%.*]] = call noundef i1 @undef_then_null(i1 [[C]]) #[[ATTR11:[0-9]+]] 953; IS__CGSCC_NPM-NEXT: ret i1 [[R1]] 954; 955 %r1 = call i1 @undef_then_null(i1 %c, i32* undef, i32* undef) 956 ret i1 %r1 957} 958define internal i1 @undef_then_null(i1 %c, i32* %i32Aptr, i32* %i32Bptr) { 959; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone 960; IS__TUNIT____-LABEL: define {{[^@]+}}@undef_then_null 961; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR2]] { 962; IS__TUNIT____-NEXT: [[CMP1:%.*]] = icmp eq i32* null, null 963; IS__TUNIT____-NEXT: [[CMP2:%.*]] = icmp eq i1 [[CMP1]], false 964; IS__TUNIT____-NEXT: [[OR:%.*]] = or i1 [[CMP2]], [[C]] 965; IS__TUNIT____-NEXT: br i1 [[OR]], label [[A:%.*]], label [[B:%.*]] 966; IS__TUNIT____: a: 967; IS__TUNIT____-NEXT: [[R2:%.*]] = call i1 @undef_then_null(i1 noundef false) #[[ATTR2]] 968; IS__TUNIT____-NEXT: ret i1 [[R2]] 969; IS__TUNIT____: b: 970; IS__TUNIT____-NEXT: ret i1 [[CMP2]] 971; 972; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind readnone 973; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@undef_then_null 974; IS__CGSCC_OPM-SAME: (i1 [[C:%.*]]) #[[ATTR6]] { 975; IS__CGSCC_OPM-NEXT: [[CMP1:%.*]] = icmp eq i32* null, null 976; IS__CGSCC_OPM-NEXT: [[CMP2:%.*]] = icmp eq i1 [[CMP1]], false 977; IS__CGSCC_OPM-NEXT: [[OR:%.*]] = or i1 [[CMP2]], [[C]] 978; IS__CGSCC_OPM-NEXT: br i1 [[OR]], label [[A:%.*]], label [[B:%.*]] 979; IS__CGSCC_OPM: a: 980; IS__CGSCC_OPM-NEXT: [[R2:%.*]] = call noundef i1 @undef_then_null(i1 noundef false) #[[ATTR6]] 981; IS__CGSCC_OPM-NEXT: ret i1 [[R2]] 982; IS__CGSCC_OPM: b: 983; IS__CGSCC_OPM-NEXT: ret i1 [[CMP2]] 984; 985; IS__CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone 986; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@undef_then_null 987; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR5]] { 988; IS__CGSCC_NPM-NEXT: [[CMP1:%.*]] = icmp eq i32* null, null 989; IS__CGSCC_NPM-NEXT: [[CMP2:%.*]] = icmp eq i1 [[CMP1]], false 990; IS__CGSCC_NPM-NEXT: [[OR:%.*]] = or i1 [[CMP2]], [[C]] 991; IS__CGSCC_NPM-NEXT: br i1 [[OR]], label [[A:%.*]], label [[B:%.*]] 992; IS__CGSCC_NPM: a: 993; IS__CGSCC_NPM-NEXT: [[R2:%.*]] = call noundef i1 @undef_then_null(i1 noundef false) #[[ATTR5]] 994; IS__CGSCC_NPM-NEXT: ret i1 [[R2]] 995; IS__CGSCC_NPM: b: 996; IS__CGSCC_NPM-NEXT: ret i1 [[CMP2]] 997; 998 %cmp1 = icmp eq i32* %i32Aptr, %i32Bptr 999 %cmp2 = icmp eq i1 %cmp1, false 1000 %or = or i1 %cmp2, %c 1001 br i1 %or, label %a, label %b 1002a: 1003 %r2 = call i1 @undef_then_null(i1 false, i32* null, i32* null) 1004 ret i1 %r2 1005b: 1006 ret i1 %cmp2 1007} 1008 1009define i1 @test_merge_with_undef_values(i1 %c) { 1010; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone 1011; IS__TUNIT____-LABEL: define {{[^@]+}}@test_merge_with_undef_values 1012; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR2]] { 1013; IS__TUNIT____-NEXT: [[R1:%.*]] = call i1 @undef_then_1(i1 [[C]]) #[[ATTR2]] 1014; IS__TUNIT____-NEXT: ret i1 [[R1]] 1015; 1016; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 1017; IS__CGSCC____-LABEL: define {{[^@]+}}@test_merge_with_undef_values 1018; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR1]] { 1019; IS__CGSCC____-NEXT: ret i1 false 1020; 1021 %r1 = call i1 @undef_then_1(i1 %c, i32 undef, i32 undef) 1022 ret i1 %r1 1023} 1024define internal i1 @undef_then_1(i1 %c, i32 %i32A, i32 %i32B) { 1025; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone 1026; IS__TUNIT____-LABEL: define {{[^@]+}}@undef_then_1 1027; IS__TUNIT____-SAME: (i1 [[C:%.*]]) #[[ATTR2]] { 1028; IS__TUNIT____-NEXT: [[CMP1:%.*]] = icmp eq i32 1, 1 1029; IS__TUNIT____-NEXT: [[CMP2:%.*]] = icmp eq i1 [[CMP1]], false 1030; IS__TUNIT____-NEXT: [[OR:%.*]] = or i1 [[CMP2]], [[C]] 1031; IS__TUNIT____-NEXT: br i1 [[OR]], label [[A:%.*]], label [[B:%.*]] 1032; IS__TUNIT____: a: 1033; IS__TUNIT____-NEXT: [[R2:%.*]] = call i1 @undef_then_1(i1 noundef false) #[[ATTR2]] 1034; IS__TUNIT____-NEXT: ret i1 [[R2]] 1035; IS__TUNIT____: b: 1036; IS__TUNIT____-NEXT: ret i1 [[CMP2]] 1037; 1038; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind readnone willreturn 1039; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@undef_then_1 1040; IS__CGSCC_OPM-SAME: (i1 [[C:%.*]]) #[[ATTR7:[0-9]+]] { 1041; IS__CGSCC_OPM-NEXT: [[CMP1:%.*]] = icmp eq i32 1, 1 1042; IS__CGSCC_OPM-NEXT: [[CMP2:%.*]] = icmp eq i1 [[CMP1]], false 1043; IS__CGSCC_OPM-NEXT: [[OR:%.*]] = or i1 false, [[C]] 1044; IS__CGSCC_OPM-NEXT: br i1 [[OR]], label [[A:%.*]], label [[B:%.*]] 1045; IS__CGSCC_OPM: a: 1046; IS__CGSCC_OPM-NEXT: [[R2:%.*]] = call i1 @undef_then_1(i1 noundef false) #[[ATTR6]] 1047; IS__CGSCC_OPM-NEXT: ret i1 undef 1048; IS__CGSCC_OPM: b: 1049; IS__CGSCC_OPM-NEXT: ret i1 undef 1050; 1051; IS__CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn 1052; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@undef_then_1 1053; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR6:[0-9]+]] { 1054; IS__CGSCC_NPM-NEXT: [[CMP1:%.*]] = icmp eq i32 1, 1 1055; IS__CGSCC_NPM-NEXT: [[CMP2:%.*]] = icmp eq i1 [[CMP1]], false 1056; IS__CGSCC_NPM-NEXT: [[OR:%.*]] = or i1 false, [[C]] 1057; IS__CGSCC_NPM-NEXT: br i1 [[OR]], label [[A:%.*]], label [[B:%.*]] 1058; IS__CGSCC_NPM: a: 1059; IS__CGSCC_NPM-NEXT: [[R2:%.*]] = call i1 @undef_then_1(i1 noundef false) #[[ATTR5]] 1060; IS__CGSCC_NPM-NEXT: ret i1 undef 1061; IS__CGSCC_NPM: b: 1062; IS__CGSCC_NPM-NEXT: ret i1 undef 1063; 1064 %cmp1 = icmp eq i32 %i32A, %i32B 1065 %cmp2 = icmp eq i1 %cmp1, false 1066 %or = or i1 %cmp2, %c 1067 br i1 %or, label %a, label %b 1068a: 1069 %r2 = call i1 @undef_then_1(i1 false, i32 1, i32 1) 1070 ret i1 %r2 1071b: 1072 ret i1 %cmp2 1073} 1074 1075define i1 @icmp() { 1076; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn 1077; IS__TUNIT____-LABEL: define {{[^@]+}}@icmp 1078; IS__TUNIT____-SAME: () #[[ATTR1]] { 1079; IS__TUNIT____-NEXT: ret i1 true 1080; 1081; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 1082; IS__CGSCC____-LABEL: define {{[^@]+}}@icmp 1083; IS__CGSCC____-SAME: () #[[ATTR1]] { 1084; IS__CGSCC____-NEXT: ret i1 true 1085; 1086 %c = icmp eq i8* null, null 1087 ret i1 %c 1088} 1089;. 1090; IS__TUNIT_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } 1091; IS__TUNIT_OPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn } 1092; IS__TUNIT_OPM: attributes #[[ATTR2]] = { nofree nosync nounwind readnone } 1093; IS__TUNIT_OPM: attributes #[[ATTR3]] = { argmemonly nofree nosync nounwind willreturn writeonly } 1094; IS__TUNIT_OPM: attributes #[[ATTR4]] = { nofree nosync nounwind readonly willreturn } 1095; IS__TUNIT_OPM: attributes #[[ATTR5]] = { argmemonly nofree nosync nounwind writeonly } 1096; IS__TUNIT_OPM: attributes #[[ATTR6]] = { nofree nosync nounwind willreturn writeonly } 1097; IS__TUNIT_OPM: attributes #[[ATTR7]] = { willreturn } 1098;. 1099; IS__TUNIT_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } 1100; IS__TUNIT_NPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn } 1101; IS__TUNIT_NPM: attributes #[[ATTR2]] = { nofree nosync nounwind readnone } 1102; IS__TUNIT_NPM: attributes #[[ATTR3]] = { argmemonly nofree nosync nounwind willreturn writeonly } 1103; IS__TUNIT_NPM: attributes #[[ATTR4]] = { nofree nosync nounwind readonly willreturn } 1104; IS__TUNIT_NPM: attributes #[[ATTR5]] = { nofree nosync nounwind willreturn writeonly } 1105; IS__TUNIT_NPM: attributes #[[ATTR6]] = { willreturn } 1106;. 1107; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } 1108; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } 1109; IS__CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly } 1110; IS__CGSCC_OPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind readonly willreturn } 1111; IS__CGSCC_OPM: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind writeonly } 1112; IS__CGSCC_OPM: attributes #[[ATTR5]] = { nofree norecurse nosync nounwind willreturn writeonly } 1113; IS__CGSCC_OPM: attributes #[[ATTR6]] = { nofree nosync nounwind readnone } 1114; IS__CGSCC_OPM: attributes #[[ATTR7]] = { nofree nosync nounwind readnone willreturn } 1115; IS__CGSCC_OPM: attributes #[[ATTR8]] = { readnone willreturn } 1116; IS__CGSCC_OPM: attributes #[[ATTR9]] = { willreturn } 1117; IS__CGSCC_OPM: attributes #[[ATTR10]] = { nounwind readnone willreturn } 1118; IS__CGSCC_OPM: attributes #[[ATTR11]] = { readonly willreturn } 1119; IS__CGSCC_OPM: attributes #[[ATTR12]] = { nounwind readnone } 1120;. 1121; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } 1122; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } 1123; IS__CGSCC_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly } 1124; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind readonly willreturn } 1125; IS__CGSCC_NPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly } 1126; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nofree nosync nounwind readnone } 1127; IS__CGSCC_NPM: attributes #[[ATTR6]] = { nofree nosync nounwind readnone willreturn } 1128; IS__CGSCC_NPM: attributes #[[ATTR7]] = { readnone willreturn } 1129; IS__CGSCC_NPM: attributes #[[ATTR8]] = { willreturn } 1130; IS__CGSCC_NPM: attributes #[[ATTR9]] = { nounwind readnone willreturn } 1131; IS__CGSCC_NPM: attributes #[[ATTR10]] = { readonly willreturn } 1132; IS__CGSCC_NPM: attributes #[[ATTR11]] = { nounwind readnone } 1133;. 1134