380 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck %s3 4define i64 @and1(i64 %x) {5; CHECK-LABEL: and1:6; CHECK: # %bb.0:7; CHECK-NEXT: movabsq $-2147483649, %rax # imm = 0xFFFFFFFF7FFFFFFF8; CHECK-NEXT: andq %rdi, %rax9; CHECK-NEXT: retq10 %a = and i64 %x, 18446744071562067967 ; clear bit 3111 ret i64 %a12}13 14define i64 @and2(i64 %x) {15; CHECK-LABEL: and2:16; CHECK: # %bb.0:17; CHECK-NEXT: movabsq $-4294967297, %rax # imm = 0xFFFFFFFEFFFFFFFF18; CHECK-NEXT: andq %rdi, %rax19; CHECK-NEXT: retq20 %a = and i64 %x, 18446744069414584319 ; clear bit 3221 ret i64 %a22}23 24define i64 @and3(i64 %x) {25; CHECK-LABEL: and3:26; CHECK: # %bb.0:27; CHECK-NEXT: movabsq $-4611686018427387905, %rax # imm = 0xBFFFFFFFFFFFFFFF28; CHECK-NEXT: andq %rdi, %rax29; CHECK-NEXT: retq30 %a = and i64 %x, 13835058055282163711 ; clear bit 6231 ret i64 %a32}33 34define i64 @and4(i64 %x) {35; CHECK-LABEL: and4:36; CHECK: # %bb.0:37; CHECK-NEXT: movabsq $9223372036854775807, %rax # imm = 0x7FFFFFFFFFFFFFFF38; CHECK-NEXT: andq %rdi, %rax39; CHECK-NEXT: retq40 %a = and i64 %x, 9223372036854775807 ; clear bit 6341 ret i64 %a42}43 44define i64 @or1(i64 %x) {45; CHECK-LABEL: or1:46; CHECK: # %bb.0:47; CHECK-NEXT: movl $2147483648, %eax # imm = 0x8000000048; CHECK-NEXT: orq %rdi, %rax49; CHECK-NEXT: retq50 %a = or i64 %x, 2147483648 ; set bit 3151 ret i64 %a52}53 54define i64 @or2(i64 %x) {55; CHECK-LABEL: or2:56; CHECK: # %bb.0:57; CHECK-NEXT: movabsq $4294967296, %rax # imm = 0x10000000058; CHECK-NEXT: orq %rdi, %rax59; CHECK-NEXT: retq60 %a = or i64 %x, 4294967296 ; set bit 3261 ret i64 %a62}63 64define i64 @or3(i64 %x) {65; CHECK-LABEL: or3:66; CHECK: # %bb.0:67; CHECK-NEXT: movabsq $4611686018427387904, %rax # imm = 0x400000000000000068; CHECK-NEXT: orq %rdi, %rax69; CHECK-NEXT: retq70 %a = or i64 %x, 4611686018427387904 ; set bit 6271 ret i64 %a72}73 74define i64 @or4(i64 %x) {75; CHECK-LABEL: or4:76; CHECK: # %bb.0:77; CHECK-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x800000000000000078; CHECK-NEXT: orq %rdi, %rax79; CHECK-NEXT: retq80 %a = or i64 %x, 9223372036854775808 ; set bit 6381 ret i64 %a82}83 84define i64 @xor1(i64 %x) {85; CHECK-LABEL: xor1:86; CHECK: # %bb.0:87; CHECK-NEXT: movl $2147483648, %eax # imm = 0x8000000088; CHECK-NEXT: xorq %rdi, %rax89; CHECK-NEXT: retq90 %a = xor i64 %x, 2147483648 ; toggle bit 3191 ret i64 %a92}93 94define i64 @xor2(i64 %x) {95; CHECK-LABEL: xor2:96; CHECK: # %bb.0:97; CHECK-NEXT: movabsq $4294967296, %rax # imm = 0x10000000098; CHECK-NEXT: xorq %rdi, %rax99; CHECK-NEXT: retq100 %a = xor i64 %x, 4294967296 ; toggle bit 32101 ret i64 %a102}103 104define i64 @xor3(i64 %x) {105; CHECK-LABEL: xor3:106; CHECK: # %bb.0:107; CHECK-NEXT: movabsq $4611686018427387904, %rax # imm = 0x4000000000000000108; CHECK-NEXT: xorq %rdi, %rax109; CHECK-NEXT: retq110 %a = xor i64 %x, 4611686018427387904 ; toggle bit 62111 ret i64 %a112}113 114define i64 @xor4(i64 %x) {115; CHECK-LABEL: xor4:116; CHECK: # %bb.0:117; CHECK-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000118; CHECK-NEXT: xorq %rdi, %rax119; CHECK-NEXT: retq120 %a = xor i64 %x, 9223372036854775808 ; toggle bit 63121 ret i64 %a122}123 124define i64 @and1_optsize(i64 %x) optsize {125; CHECK-LABEL: and1_optsize:126; CHECK: # %bb.0:127; CHECK-NEXT: movq %rdi, %rax128; CHECK-NEXT: btrq $31, %rax129; CHECK-NEXT: retq130 %a = and i64 %x, 18446744071562067967 ; clear bit 31131 ret i64 %a132}133 134define i64 @and2_optsize(i64 %x) optsize {135; CHECK-LABEL: and2_optsize:136; CHECK: # %bb.0:137; CHECK-NEXT: movq %rdi, %rax138; CHECK-NEXT: btrq $32, %rax139; CHECK-NEXT: retq140 %a = and i64 %x, 18446744069414584319 ; clear bit 32141 ret i64 %a142}143 144define i64 @and3_optsize(i64 %x) optsize {145; CHECK-LABEL: and3_optsize:146; CHECK: # %bb.0:147; CHECK-NEXT: movq %rdi, %rax148; CHECK-NEXT: btrq $62, %rax149; CHECK-NEXT: retq150 %a = and i64 %x, 13835058055282163711 ; clear bit 62151 ret i64 %a152}153 154define i64 @and4_optsize(i64 %x) optsize {155; CHECK-LABEL: and4_optsize:156; CHECK: # %bb.0:157; CHECK-NEXT: movq %rdi, %rax158; CHECK-NEXT: btrq $63, %rax159; CHECK-NEXT: retq160 %a = and i64 %x, 9223372036854775807 ; clear bit 63161 ret i64 %a162}163 164define i64 @or1_optsize(i64 %x) optsize {165; CHECK-LABEL: or1_optsize:166; CHECK: # %bb.0:167; CHECK-NEXT: movq %rdi, %rax168; CHECK-NEXT: btsq $31, %rax169; CHECK-NEXT: retq170 %a = or i64 %x, 2147483648 ; set bit 31171 ret i64 %a172}173 174define i64 @or2_optsize(i64 %x) optsize {175; CHECK-LABEL: or2_optsize:176; CHECK: # %bb.0:177; CHECK-NEXT: movq %rdi, %rax178; CHECK-NEXT: btsq $32, %rax179; CHECK-NEXT: retq180 %a = or i64 %x, 4294967296 ; set bit 32181 ret i64 %a182}183 184define i64 @or3_optsize(i64 %x) optsize {185; CHECK-LABEL: or3_optsize:186; CHECK: # %bb.0:187; CHECK-NEXT: movq %rdi, %rax188; CHECK-NEXT: btsq $62, %rax189; CHECK-NEXT: retq190 %a = or i64 %x, 4611686018427387904 ; set bit 62191 ret i64 %a192}193 194define i64 @or4_optsize(i64 %x) optsize {195; CHECK-LABEL: or4_optsize:196; CHECK: # %bb.0:197; CHECK-NEXT: movq %rdi, %rax198; CHECK-NEXT: btsq $63, %rax199; CHECK-NEXT: retq200 %a = or i64 %x, 9223372036854775808 ; set bit 63201 ret i64 %a202}203 204define i64 @xor1_optsize(i64 %x) optsize {205; CHECK-LABEL: xor1_optsize:206; CHECK: # %bb.0:207; CHECK-NEXT: movq %rdi, %rax208; CHECK-NEXT: btcq $31, %rax209; CHECK-NEXT: retq210 %a = xor i64 %x, 2147483648 ; toggle bit 31211 ret i64 %a212}213 214define i64 @xor2_optsize(i64 %x) optsize {215; CHECK-LABEL: xor2_optsize:216; CHECK: # %bb.0:217; CHECK-NEXT: movq %rdi, %rax218; CHECK-NEXT: btcq $32, %rax219; CHECK-NEXT: retq220 %a = xor i64 %x, 4294967296 ; toggle bit 32221 ret i64 %a222}223 224define i64 @xor3_optsize(i64 %x) optsize {225; CHECK-LABEL: xor3_optsize:226; CHECK: # %bb.0:227; CHECK-NEXT: movq %rdi, %rax228; CHECK-NEXT: btcq $62, %rax229; CHECK-NEXT: retq230 %a = xor i64 %x, 4611686018427387904 ; toggle bit 62231 ret i64 %a232}233 234define i64 @xor4_optsize(i64 %x) optsize {235; CHECK-LABEL: xor4_optsize:236; CHECK: # %bb.0:237; CHECK-NEXT: movq %rdi, %rax238; CHECK-NEXT: btcq $63, %rax239; CHECK-NEXT: retq240 %a = xor i64 %x, 9223372036854775808 ; toggle bit 63241 ret i64 %a242}243 244define i64 @and1_pgso(i64 %x) !prof !14 {245; CHECK-LABEL: and1_pgso:246; CHECK: # %bb.0:247; CHECK-NEXT: movq %rdi, %rax248; CHECK-NEXT: btrq $31, %rax249; CHECK-NEXT: retq250 %a = and i64 %x, 18446744071562067967 ; clear bit 31251 ret i64 %a252}253 254define i64 @and2_pgso(i64 %x) !prof !14 {255; CHECK-LABEL: and2_pgso:256; CHECK: # %bb.0:257; CHECK-NEXT: movq %rdi, %rax258; CHECK-NEXT: btrq $32, %rax259; CHECK-NEXT: retq260 %a = and i64 %x, 18446744069414584319 ; clear bit 32261 ret i64 %a262}263 264define i64 @and3_pgso(i64 %x) !prof !14 {265; CHECK-LABEL: and3_pgso:266; CHECK: # %bb.0:267; CHECK-NEXT: movq %rdi, %rax268; CHECK-NEXT: btrq $62, %rax269; CHECK-NEXT: retq270 %a = and i64 %x, 13835058055282163711 ; clear bit 62271 ret i64 %a272}273 274define i64 @and4_pgso(i64 %x) !prof !14 {275; CHECK-LABEL: and4_pgso:276; CHECK: # %bb.0:277; CHECK-NEXT: movq %rdi, %rax278; CHECK-NEXT: btrq $63, %rax279; CHECK-NEXT: retq280 %a = and i64 %x, 9223372036854775807 ; clear bit 63281 ret i64 %a282}283 284define i64 @or1_pgso(i64 %x) !prof !14 {285; CHECK-LABEL: or1_pgso:286; CHECK: # %bb.0:287; CHECK-NEXT: movq %rdi, %rax288; CHECK-NEXT: btsq $31, %rax289; CHECK-NEXT: retq290 %a = or i64 %x, 2147483648 ; set bit 31291 ret i64 %a292}293 294define i64 @or2_pgso(i64 %x) !prof !14 {295; CHECK-LABEL: or2_pgso:296; CHECK: # %bb.0:297; CHECK-NEXT: movq %rdi, %rax298; CHECK-NEXT: btsq $32, %rax299; CHECK-NEXT: retq300 %a = or i64 %x, 4294967296 ; set bit 32301 ret i64 %a302}303 304define i64 @or3_pgso(i64 %x) !prof !14 {305; CHECK-LABEL: or3_pgso:306; CHECK: # %bb.0:307; CHECK-NEXT: movq %rdi, %rax308; CHECK-NEXT: btsq $62, %rax309; CHECK-NEXT: retq310 %a = or i64 %x, 4611686018427387904 ; set bit 62311 ret i64 %a312}313 314define i64 @or4_pgso(i64 %x) !prof !14 {315; CHECK-LABEL: or4_pgso:316; CHECK: # %bb.0:317; CHECK-NEXT: movq %rdi, %rax318; CHECK-NEXT: btsq $63, %rax319; CHECK-NEXT: retq320 %a = or i64 %x, 9223372036854775808 ; set bit 63321 ret i64 %a322}323 324define i64 @xor1_pgso(i64 %x) !prof !14 {325; CHECK-LABEL: xor1_pgso:326; CHECK: # %bb.0:327; CHECK-NEXT: movq %rdi, %rax328; CHECK-NEXT: btcq $31, %rax329; CHECK-NEXT: retq330 %a = xor i64 %x, 2147483648 ; toggle bit 31331 ret i64 %a332}333 334define i64 @xor2_pgso(i64 %x) !prof !14 {335; CHECK-LABEL: xor2_pgso:336; CHECK: # %bb.0:337; CHECK-NEXT: movq %rdi, %rax338; CHECK-NEXT: btcq $32, %rax339; CHECK-NEXT: retq340 %a = xor i64 %x, 4294967296 ; toggle bit 32341 ret i64 %a342}343 344define i64 @xor3_pgso(i64 %x) !prof !14 {345; CHECK-LABEL: xor3_pgso:346; CHECK: # %bb.0:347; CHECK-NEXT: movq %rdi, %rax348; CHECK-NEXT: btcq $62, %rax349; CHECK-NEXT: retq350 %a = xor i64 %x, 4611686018427387904 ; toggle bit 62351 ret i64 %a352}353 354define i64 @xor4_pgso(i64 %x) !prof !14 {355; CHECK-LABEL: xor4_pgso:356; CHECK: # %bb.0:357; CHECK-NEXT: movq %rdi, %rax358; CHECK-NEXT: btcq $63, %rax359; CHECK-NEXT: retq360 %a = xor i64 %x, 9223372036854775808 ; toggle bit 63361 ret i64 %a362}363 364!llvm.module.flags = !{!0}365!0 = !{i32 1, !"ProfileSummary", !1}366!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}367!2 = !{!"ProfileFormat", !"InstrProf"}368!3 = !{!"TotalCount", i64 10000}369!4 = !{!"MaxCount", i64 10}370!5 = !{!"MaxInternalCount", i64 1}371!6 = !{!"MaxFunctionCount", i64 1000}372!7 = !{!"NumCounts", i64 3}373!8 = !{!"NumFunctions", i64 3}374!9 = !{!"DetailedSummary", !10}375!10 = !{!11, !12, !13}376!11 = !{i32 10000, i64 100, i32 1}377!12 = !{i32 999000, i64 100, i32 1}378!13 = !{i32 999999, i64 1, i32 2}379!14 = !{!"function_entry_count", i64 0}380