297 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=i686-unknown-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK323; RUN: llc -mtriple=x86_64-unknown-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK644 5define void @zero_optsize(ptr %p) optsize {6; CHECK32-LABEL: zero_optsize:7; CHECK32: # %bb.0: # %entry8; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax9; CHECK32-NEXT: movl $0, (%eax)10; CHECK32-NEXT: retl11;12; CHECK64-LABEL: zero_optsize:13; CHECK64: # %bb.0: # %entry14; CHECK64-NEXT: movl $0, (%rdi)15; CHECK64-NEXT: retq16entry:17 store i32 0, ptr %p18 ret void19 20}21 22define void @zero_pgso(ptr %p) !prof !14 {23; CHECK32-LABEL: zero_pgso:24; CHECK32: # %bb.0: # %entry25; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax26; CHECK32-NEXT: movl $0, (%eax)27; CHECK32-NEXT: retl28;29; CHECK64-LABEL: zero_pgso:30; CHECK64: # %bb.0: # %entry31; CHECK64-NEXT: movl $0, (%rdi)32; CHECK64-NEXT: retq33entry:34 store i32 0, ptr %p35 ret void36 37}38 39define void @minus_one_optsize(ptr %p) optsize {40; CHECK32-LABEL: minus_one_optsize:41; CHECK32: # %bb.0: # %entry42; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax43; CHECK32-NEXT: movl $-1, (%eax)44; CHECK32-NEXT: retl45;46; CHECK64-LABEL: minus_one_optsize:47; CHECK64: # %bb.0: # %entry48; CHECK64-NEXT: movl $-1, (%rdi)49; CHECK64-NEXT: retq50entry:51 store i32 -1, ptr %p52 ret void53 54}55 56define void @minus_one_pgso(ptr %p) !prof !14 {57; CHECK32-LABEL: minus_one_pgso:58; CHECK32: # %bb.0: # %entry59; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax60; CHECK32-NEXT: movl $-1, (%eax)61; CHECK32-NEXT: retl62;63; CHECK64-LABEL: minus_one_pgso:64; CHECK64: # %bb.0: # %entry65; CHECK64-NEXT: movl $-1, (%rdi)66; CHECK64-NEXT: retq67entry:68 store i32 -1, ptr %p69 ret void70 71}72 73define void @zero_64(ptr %p) minsize {74; CHECK32-LABEL: zero_64:75; CHECK32: # %bb.0: # %entry76; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax77; CHECK32-NEXT: andl $0, 4(%eax)78; CHECK32-NEXT: andl $0, (%eax)79; CHECK32-NEXT: retl80;81; CHECK64-LABEL: zero_64:82; CHECK64: # %bb.0: # %entry83; CHECK64-NEXT: andq $0, (%rdi)84; CHECK64-NEXT: retq85entry:86 store i64 0, ptr %p87 ret void88 89}90 91define void @zero_32(ptr %p) minsize {92; CHECK32-LABEL: zero_32:93; CHECK32: # %bb.0: # %entry94; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax95; CHECK32-NEXT: andl $0, (%eax)96; CHECK32-NEXT: retl97;98; CHECK64-LABEL: zero_32:99; CHECK64: # %bb.0: # %entry100; CHECK64-NEXT: andl $0, (%rdi)101; CHECK64-NEXT: retq102entry:103 store i32 0, ptr %p104 ret void105 106}107 108define void @zero_16(ptr %p) minsize {109; CHECK32-LABEL: zero_16:110; CHECK32: # %bb.0: # %entry111; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax112; CHECK32-NEXT: andw $0, (%eax)113; CHECK32-NEXT: retl114;115; CHECK64-LABEL: zero_16:116; CHECK64: # %bb.0: # %entry117; CHECK64-NEXT: andw $0, (%rdi)118; CHECK64-NEXT: retq119entry:120 store i16 0, ptr %p121 ret void122 123}124 125 126define void @minus_one_64(ptr %p) minsize {127; CHECK32-LABEL: minus_one_64:128; CHECK32: # %bb.0: # %entry129; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax130; CHECK32-NEXT: orl $-1, 4(%eax)131; CHECK32-NEXT: orl $-1, (%eax)132; CHECK32-NEXT: retl133;134; CHECK64-LABEL: minus_one_64:135; CHECK64: # %bb.0: # %entry136; CHECK64-NEXT: orq $-1, (%rdi)137; CHECK64-NEXT: retq138entry:139 store i64 -1, ptr %p140 ret void141 142}143 144define void @minus_one_32(ptr %p) minsize {145; CHECK32-LABEL: minus_one_32:146; CHECK32: # %bb.0: # %entry147; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax148; CHECK32-NEXT: orl $-1, (%eax)149; CHECK32-NEXT: retl150;151; CHECK64-LABEL: minus_one_32:152; CHECK64: # %bb.0: # %entry153; CHECK64-NEXT: orl $-1, (%rdi)154; CHECK64-NEXT: retq155entry:156 store i32 -1, ptr %p157 ret void158 159}160 161define void @minus_one_16(ptr %p) minsize {162; CHECK32-LABEL: minus_one_16:163; CHECK32: # %bb.0: # %entry164; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax165; CHECK32-NEXT: orw $-1, (%eax)166; CHECK32-NEXT: retl167;168; CHECK64-LABEL: minus_one_16:169; CHECK64: # %bb.0: # %entry170; CHECK64-NEXT: orw $-1, (%rdi)171; CHECK64-NEXT: retq172entry:173 store i16 -1, ptr %p174 ret void175 176}177 178; FIXME: Make sure we don't use the and/or trick on volatile stores.179define void @volatile_zero_64(ptr %p) minsize {180; CHECK32-LABEL: volatile_zero_64:181; CHECK32: # %bb.0: # %entry182; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax183; CHECK32-NEXT: xorl %ecx, %ecx184; CHECK32-NEXT: movl %ecx, 4(%eax)185; CHECK32-NEXT: movl %ecx, (%eax)186; CHECK32-NEXT: retl187;188; CHECK64-LABEL: volatile_zero_64:189; CHECK64: # %bb.0: # %entry190; CHECK64-NEXT: movq $0, (%rdi)191; CHECK64-NEXT: retq192entry:193 store volatile i64 0, ptr %p194 ret void195}196 197define void @volatile_zero_32(ptr %p) minsize {198; CHECK32-LABEL: volatile_zero_32:199; CHECK32: # %bb.0: # %entry200; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax201; CHECK32-NEXT: movl $0, (%eax)202; CHECK32-NEXT: retl203;204; CHECK64-LABEL: volatile_zero_32:205; CHECK64: # %bb.0: # %entry206; CHECK64-NEXT: movl $0, (%rdi)207; CHECK64-NEXT: retq208entry:209 store volatile i32 0, ptr %p210 ret void211}212 213define void @volatile_zero_16(ptr %p) minsize {214; CHECK32-LABEL: volatile_zero_16:215; CHECK32: # %bb.0: # %entry216; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax217; CHECK32-NEXT: movw $0, (%eax)218; CHECK32-NEXT: retl219;220; CHECK64-LABEL: volatile_zero_16:221; CHECK64: # %bb.0: # %entry222; CHECK64-NEXT: movw $0, (%rdi)223; CHECK64-NEXT: retq224entry:225 store volatile i16 0, ptr %p226 ret void227}228 229 230define void @volatile_minus_one_64(ptr %p) minsize {231; CHECK32-LABEL: volatile_minus_one_64:232; CHECK32: # %bb.0: # %entry233; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax234; CHECK32-NEXT: xorl %ecx, %ecx235; CHECK32-NEXT: decl %ecx236; CHECK32-NEXT: movl %ecx, 4(%eax)237; CHECK32-NEXT: movl %ecx, (%eax)238; CHECK32-NEXT: retl239;240; CHECK64-LABEL: volatile_minus_one_64:241; CHECK64: # %bb.0: # %entry242; CHECK64-NEXT: movq $-1, (%rdi)243; CHECK64-NEXT: retq244entry:245 store volatile i64 -1, ptr %p246 ret void247}248 249define void @volatile_minus_one_32(ptr %p) minsize {250; CHECK32-LABEL: volatile_minus_one_32:251; CHECK32: # %bb.0: # %entry252; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax253; CHECK32-NEXT: movl $-1, (%eax)254; CHECK32-NEXT: retl255;256; CHECK64-LABEL: volatile_minus_one_32:257; CHECK64: # %bb.0: # %entry258; CHECK64-NEXT: movl $-1, (%rdi)259; CHECK64-NEXT: retq260entry:261 store volatile i32 -1, ptr %p262 ret void263}264 265define void @volatile_minus_one_16(ptr %p) minsize {266; CHECK32-LABEL: volatile_minus_one_16:267; CHECK32: # %bb.0: # %entry268; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax269; CHECK32-NEXT: movw $-1, (%eax)270; CHECK32-NEXT: retl271;272; CHECK64-LABEL: volatile_minus_one_16:273; CHECK64: # %bb.0: # %entry274; CHECK64-NEXT: movw $-1, (%rdi)275; CHECK64-NEXT: retq276entry:277 store volatile i16 -1, ptr %p278 ret void279}280 281!llvm.module.flags = !{!0}282!0 = !{i32 1, !"ProfileSummary", !1}283!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}284!2 = !{!"ProfileFormat", !"InstrProf"}285!3 = !{!"TotalCount", i64 10000}286!4 = !{!"MaxCount", i64 10}287!5 = !{!"MaxInternalCount", i64 1}288!6 = !{!"MaxFunctionCount", i64 1000}289!7 = !{!"NumCounts", i64 3}290!8 = !{!"NumFunctions", i64 3}291!9 = !{!"DetailedSummary", !10}292!10 = !{!11, !12, !13}293!11 = !{i32 10000, i64 100, i32 1}294!12 = !{i32 999000, i64 100, i32 1}295!13 = !{i32 999999, i64 1, i32 2}296!14 = !{!"function_entry_count", i64 0}297