brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · cc47b8c Raw
251 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test memset 0 with variable length3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6define void @fun0(ptr %Addr, i64 %Len) {7; CHECK-LABEL: fun0:8; CHECK:       # %bb.0:9; CHECK-NEXT:    aghi %r3, -110; CHECK-NEXT:    cgibe %r3, -1, 0(%r14)11; CHECK-NEXT:  .LBB0_1:12; CHECK-NEXT:    srlg %r0, %r3, 813; CHECK-NEXT:    cgije %r0, 0, .LBB0_314; CHECK-NEXT:  .LBB0_2: # =>This Inner Loop Header: Depth=115; CHECK-NEXT:    xc 0(256,%r2), 0(%r2)16; CHECK-NEXT:    la %r2, 256(%r2)17; CHECK-NEXT:    brctg %r0, .LBB0_218; CHECK-NEXT:  .LBB0_3:19; CHECK-NEXT:    exrl %r3, .Ltmp020; CHECK-NEXT:    br %r1421  tail call void @llvm.memset.p0.i64(ptr %Addr, i8 0, i64 %Len, i1 false)22  ret void23}24 25define void @fun1(ptr %Addr, i32 %Len) {26; CHECK-LABEL: fun1:27; CHECK:       # %bb.0:28; CHECK-NEXT:    llgfr %r1, %r329; CHECK-NEXT:    aghi %r1, -130; CHECK-NEXT:    cgibe %r1, -1, 0(%r14)31; CHECK-NEXT:  .LBB1_1:32; CHECK-NEXT:    srlg %r0, %r1, 833; CHECK-NEXT:    cgije %r0, 0, .LBB1_334; CHECK-NEXT:  .LBB1_2: # =>This Inner Loop Header: Depth=135; CHECK-NEXT:    xc 0(256,%r2), 0(%r2)36; CHECK-NEXT:    la %r2, 256(%r2)37; CHECK-NEXT:    brctg %r0, .LBB1_238; CHECK-NEXT:  .LBB1_3:39; CHECK-NEXT:    exrl %r1, .Ltmp040; CHECK-NEXT:    br %r1441  tail call void @llvm.memset.p0.i32(ptr %Addr, i8 0, i32 %Len, i1 false)42  ret void43}44 45; Test that identical target instructions get reused.46define void @fun2(ptr %Addr, i32 %Len) {47; CHECK-LABEL: fun2:48; CHECK:       # %bb.0:49; CHECK-NEXT:    llgfr %r1, %r350; CHECK-NEXT:    aghi %r1, -151; CHECK-NEXT:    cgije %r1, -1, .LBB2_452; CHECK-NEXT:  # %bb.1:53; CHECK-NEXT:    srlg %r0, %r1, 854; CHECK-NEXT:    lgr %r3, %r255; CHECK-NEXT:    cgije %r0, 0, .LBB2_356; CHECK-NEXT:  .LBB2_2: # =>This Inner Loop Header: Depth=157; CHECK-NEXT:    xc 0(256,%r3), 0(%r3)58; CHECK-NEXT:    la %r3, 256(%r3)59; CHECK-NEXT:    brctg %r0, .LBB2_260; CHECK-NEXT:  .LBB2_3:61; CHECK-NEXT:    exrl %r1, .Ltmp162; CHECK-NEXT:  .LBB2_4:63; CHECK-NEXT:    cgije %r1, -1, .LBB2_864; CHECK-NEXT:  # %bb.5:65; CHECK-NEXT:    srlg %r0, %r1, 866; CHECK-NEXT:    lgr %r3, %r267; CHECK-NEXT:    cgije %r0, 0, .LBB2_768; CHECK-NEXT:  .LBB2_6: # =>This Inner Loop Header: Depth=169; CHECK-NEXT:    xc 0(256,%r3), 0(%r3)70; CHECK-NEXT:    la %r3, 256(%r3)71; CHECK-NEXT:    brctg %r0, .LBB2_672; CHECK-NEXT:  .LBB2_7:73; CHECK-NEXT:    exrl %r1, .Ltmp174; CHECK-NEXT:  .LBB2_8:75; CHECK-NEXT:    cgibe %r1, -1, 0(%r14)76; CHECK-NEXT:  .LBB2_9:77; CHECK-NEXT:    srlg %r0, %r1, 878; CHECK-NEXT:    cgije %r0, 0, .LBB2_1179; CHECK-NEXT:  .LBB2_10: # =>This Inner Loop Header: Depth=180; CHECK-NEXT:    xc 0(256,%r2), 0(%r2)81; CHECK-NEXT:    la %r2, 256(%r2)82; CHECK-NEXT:    brctg %r0, .LBB2_1083; CHECK-NEXT:  .LBB2_11:84; CHECK-NEXT:    exrl %r1, .Ltmp085; CHECK-NEXT:    br %r1486  tail call void @llvm.memset.p0.i32(ptr %Addr, i8 0, i32 %Len, i1 false)87  tail call void @llvm.memset.p0.i32(ptr %Addr, i8 0, i32 %Len, i1 false)88  tail call void @llvm.memset.p0.i32(ptr %Addr, i8 0, i32 %Len, i1 false)89  ret void90}91 92; Test that a memset to nullptr compiles.93define void @fun3(i64 %Len) {94; CHECK-LABEL: fun3:95; CHECK:       # %bb.0:96; CHECK-NEXT:    aghi %r2, -197; CHECK-NEXT:    cgibe %r2, -1, 0(%r14)98; CHECK-NEXT:  .LBB3_1:99; CHECK-NEXT:    srlg %r0, %r2, 8100; CHECK-NEXT:    lghi %r1, 0101; CHECK-NEXT:    cgije %r0, 0, .LBB3_3102; CHECK-NEXT:  .LBB3_2: # =>This Inner Loop Header: Depth=1103; CHECK-NEXT:    xc 0(256,%r1), 0(%r1)104; CHECK-NEXT:    la %r1, 256(%r1)105; CHECK-NEXT:    brctg %r0, .LBB3_2106; CHECK-NEXT:  .LBB3_3:107; CHECK-NEXT:    exrl %r2, .Ltmp2108; CHECK-NEXT:    br %r14109  call void @llvm.memset.p0.i64(ptr null, i8 0, i64 %Len, i1 false)110  ret void111}112 113; Test that a memset with a length argument that DAGCombiner will convert114; into a constant get the correct number of bytes set.115@Data = external hidden constant [1024 x i8], align 2116define void @fun4() {117; CHECK-LABEL: fun4:118; CHECK:       # %bb.0:119; CHECK-NEXT:    larl %r1, Data120; CHECK-NEXT:    xc 35(256,%r1), 35(%r1)121; CHECK-NEXT:    xc 291(256,%r1), 291(%r1)122; CHECK-NEXT:    xc 547(256,%r1), 547(%r1)123; CHECK-NEXT:    xc 803(221,%r1), 803(%r1)124; CHECK-NEXT:    mvghi 0(%r1), 989125; CHECK-NEXT:    br %r14126  call void @llvm.memset.p0.i64(127     ptr getelementptr inbounds ([1024 x i8], ptr @Data, i64 0, i64 35),128     i8 0,129     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],130                                     ptr @Data, i64 1, i64 0) to i64), i64 1),131              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],132                                     ptr @Data, i64 0, i64 35) to i64), i64 1)),133     i1 false)134  %i11 = getelementptr i8, ptr null,135     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],136                                     ptr @Data, i64 1, i64 0) to i64), i64 1),137              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],138                                     ptr @Data, i64 0, i64 35) to i64), i64 1))139  store ptr %i11, ptr undef, align 8140  ret void141}142 143; The same, with a resulting constant length of 0.144define void @fun5() {145; CHECK-LABEL: fun5:146; CHECK:       # %bb.0:147; CHECK-NEXT:    mvghi 0(%r1), 0148; CHECK-NEXT:    br %r14149  call void @llvm.memset.p0.i64(150     ptr getelementptr inbounds ([1024 x i8], ptr @Data, i64 0, i64 35),151     i8 0,152     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],153                                     ptr @Data, i64 1, i64 35) to i64), i64 1),154              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],155                                     ptr @Data, i64 1, i64 35) to i64), i64 1)),156     i1 false)157  %i11 = getelementptr i8, ptr null,158     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],159                                     ptr @Data, i64 1, i64 35) to i64), i64 1),160              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],161                                     ptr @Data, i64 1, i64 35) to i64), i64 1))162  store ptr %i11, ptr undef, align 8163  ret void164}165 166; The same, with a resulting constant length of 1.167define void @fun6() {168; CHECK-LABEL: fun6:169; CHECK:       # %bb.0:170; CHECK-NEXT:    larl %r1, Data171; CHECK-NEXT:    xc 35(1,%r1), 35(%r1)172; CHECK-NEXT:    mvghi 0(%r1), 1173; CHECK-NEXT:    br %r14174  call void @llvm.memset.p0.i64(175     ptr getelementptr inbounds ([1024 x i8], ptr @Data, i64 0, i64 35),176     i8 0,177     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],178                                     ptr @Data, i64 1, i64 36) to i64), i64 1),179              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],180                                     ptr @Data, i64 1, i64 35) to i64), i64 1)),181     i1 false)182  %i11 = getelementptr i8, ptr null,183     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],184                                     ptr @Data, i64 1, i64 36) to i64), i64 1),185              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],186                                     ptr @Data, i64 1, i64 35) to i64), i64 1))187  store ptr %i11, ptr undef, align 8188  ret void189}190 191; The same, with a resulting constant length of 256.192define void @fun7() {193; CHECK-LABEL: fun7:194; CHECK:       # %bb.0:195; CHECK-NEXT:    larl %r1, Data196; CHECK-NEXT:    xc 35(256,%r1), 35(%r1)197; CHECK-NEXT:    mvghi 0(%r1), 256198; CHECK-NEXT:    br %r14199  call void @llvm.memset.p0.i64(200     ptr getelementptr inbounds ([1024 x i8], ptr @Data, i64 0, i64 35),201     i8 0,202     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],203                                     ptr @Data, i64 1, i64 291) to i64), i64 1),204              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],205                                     ptr @Data, i64 1, i64 35) to i64), i64 1)),206     i1 false)207  %i11 = getelementptr i8, ptr null,208     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],209                                     ptr @Data, i64 1, i64 291) to i64), i64 1),210              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],211                                     ptr @Data, i64 1, i64 35) to i64), i64 1))212  store ptr %i11, ptr undef, align 8213  ret void214}215 216; The same, with a resulting constant length of 257.217define void @fun8() {218; CHECK-LABEL: fun8:219; CHECK:       # %bb.0:220; CHECK-NEXT:    larl %r1, Data221; CHECK-NEXT:    xc 35(256,%r1), 35(%r1)222; CHECK-NEXT:    xc 291(1,%r1), 291(%r1)223; CHECK-NEXT:    mvghi 0(%r1), 257224; CHECK-NEXT:    br %r14225  call void @llvm.memset.p0.i64(226     ptr getelementptr inbounds ([1024 x i8], ptr @Data, i64 0, i64 35),227     i8 0,228     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],229                                     ptr @Data, i64 1, i64 292) to i64), i64 1),230              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],231                                     ptr @Data, i64 1, i64 35) to i64), i64 1)),232     i1 false)233  %i11 = getelementptr i8, ptr null,234     i64 sub (i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],235                                     ptr @Data, i64 1, i64 292) to i64), i64 1),236              i64 add (i64 ptrtoint (ptr getelementptr inbounds ([1024 x i8],237                                     ptr @Data, i64 1, i64 35) to i64), i64 1))238  store ptr %i11, ptr undef, align 8239  ret void240}241 242; CHECK:       .Ltmp2:243; CHECK-NEXT: 	 xc 0(1,%r1), 0(%r1)244; CHECK-NEXT:  .Ltmp0:245; CHECK-NEXT:    xc 0(1,%r2), 0(%r2)246; CHECK-NEXT:  .Ltmp1:247; CHECK-NEXT:    xc 0(1,%r3), 0(%r3)248 249declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)250declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)251