Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8360789

Optimize flatfield non-atomic update using vector instructions

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • repo-valhalla
    • hotspot

      Currently, InlineTypeNode::store_flat emits separate store IR for each field of a value class; this can be optimized by using vector instructions.

      The size of the value instance is recorded in the layout helper part of Klass header; this can be used to emit efficient vector store instructions. If the size of a value object is less than the vector size, emit a predicated vector instruction after computing a mask based on the object size.

      Consider the following IR snipper, where all the fields of a value instance are continuously laid out.

      (gdb) p this->dump(3)
        29 ConL === 0 [[ 28 202 226 532 584 617 ]] #long:40
       200 ConL === 0 [[ 199 224 530 582 615 ]] #long:36
        33 ConL === 0 [[ 32 197 222 528 580 613 ]] #long:32
       195 ConL === 0 [[ 194 220 526 578 611 ]] #long:28
        37 ConL === 0 [[ 36 192 218 524 576 609 ]] #long:24
       190 ConL === 0 [[ 189 216 522 547 574 607 ]] #long:20
       187 ConL === 0 [[ 186 214 520 572 605 ]] #long:16
       179 ConL === 0 [[ 180 183 211 212 518 569 570 602 603 635 ]] #long:12
       363 CheckCastPP === 360 358 [[ 344 344 369 369 393 393 401 401 410 410 418 418 427 427 435 435 444 444 452 452 461 461 469 469 478 478 486 486 495 495 503 503 617 515 517 518 518 520 520 522 522 524 524 526 526 528 528 530 530 532 532 517 584 540 543 543 584 569 569 570 570 572 572 574 574 576 576 578 578 580 580 582 582 597 617 602 602 603 603 605 605 607 607 609 609 611 611 613 613 615 615 ]] #MyVector:NotNull:exact * Oop:MyVector:NotNull:exact * !jvms: MyVector::add @ bci:0 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       597 MemBarStoreStore === 381 1 514 1 1 363 [[ 598 599 ]] !jvms: MyVector::<init> @ bci:-1 (line 18) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       532 AddP === _ 363 363 29 [[ 533 585 618 ]] Oop:MyVector:NotNull:exact+40 * !jvms: MyVector::<init> @ bci:42 (line 25) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       530 AddP === _ 363 363 200 [[ 531 583 616 ]] Oop:MyVector:NotNull:exact+36 * !jvms: MyVector::<init> @ bci:36 (line 24) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       528 AddP === _ 363 363 33 [[ 529 581 614 ]] Oop:MyVector:NotNull:exact+32 * !jvms: MyVector::<init> @ bci:30 (line 23) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       526 AddP === _ 363 363 195 [[ 527 579 612 ]] Oop:MyVector:NotNull:exact+28 * !jvms: MyVector::<init> @ bci:24 (line 22) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       524 AddP === _ 363 363 37 [[ 525 577 610 ]] Oop:MyVector:NotNull:exact+24 * !jvms: MyVector::<init> @ bci:18 (line 21) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       522 AddP === _ 363 363 190 [[ 523 575 608 ]] Oop:MyVector:NotNull:exact+20 * !jvms: MyVector::<init> @ bci:12 (line 20) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       520 AddP === _ 363 363 187 [[ 521 573 606 ]] Oop:MyVector:NotNull:exact+16 * !jvms: MyVector::<init> @ bci:7 (line 19) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       518 AddP === _ 363 363 179 [[ 519 571 604 ]] Oop:MyVector:NotNull:exact+12 * !jvms: MyVector::<init> @ bci:2 (line 18) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       599 Proj === 597 [[ 600 604 606 608 610 612 614 616 618 331 332 306 307 255 256 629 ]] #2 Memory: @BotPTR *+bot, idx=Bot; !jvms: MyVector::<init> @ bci:-1 (line 18) MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
         0 Root === 0 91 109 120 131 142 164 177 273 292 387 [[ 0 1 3 19 20 23 25 27 29 31 33 35 37 46 49 57 67 86 99 104 115 126 137 151 159 172 179 182 185 187 190 195 200 229 278 287 545 549 ]]
       618 LoadF === _ 599 532 [[ 601 634 ]] @MyVector:exact+40 *, name=lane7, idx=20; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       616 LoadF === _ 599 530 [[ 601 634 ]] @MyVector:exact+36 *, name=lane6, idx=19; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       614 LoadF === _ 599 528 [[ 601 634 ]] @MyVector:exact+32 *, name=lane5, idx=18; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       612 LoadF === _ 599 526 [[ 601 634 ]] @MyVector:exact+28 *, name=lane4, idx=17; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       610 LoadF === _ 599 524 [[ 601 634 ]] @MyVector:exact+24 *, name=lane3, idx=16; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       608 LoadF === _ 599 522 [[ 601 634 ]] @MyVector:exact+20 *, name=lane2, idx=15; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       606 LoadF === _ 599 520 [[ 601 634 ]] @MyVector:exact+16 *, name=lane1, idx=14; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
       604 LoadF === _ 599 518 [[ 601 634 ]] @MyVector:exact+12 *, name=lane0, idx=13; #float !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)
        99 ConI === 0 [[ 100 111 122 133 181 233 232 228 210 232 246 297 312 313 316 319 322 334 335 338 341 366 367 370 373 388 388 390 391 394 397 398 399 402 405 405 407 408 411 414 415 416 419 422 422 424 425 428 431 432 433 436 439 439 441 442 445 448 449 450 453 456 456 458 459 462 465 466 467 470 473 473 475 476 479 482 483 484 487 490 490 492 493 496 499 500 501 504 507 507 568 601 619 627 628 631 634 ]] #int:1
        20 ConI === 0 [[ 181 228 233 245 296 312 319 321 334 341 346 366 373 374 390 397 398 407 414 415 424 431 432 441 448 449 458 465 466 475 482 483 492 499 500 550 551 551 552 553 568 601 619 627 634 ]] #int:0
        49 ConP === 0 [[ 50 48 70 69 165 173 181 204 228 231 262 269 319 341 373 376 397 414 431 448 465 482 499 568 601 619 634 ]] #null
       601 InlineType === _ 49 20 99 604 606 608 610 612 614 616 618 [[ 333 308 257 252 630 ]] #MyVector:NotNull:exact * Oop:MyVector:NotNull:exact * !jvms: MyVector::add @ bci:76 (line 40) explicit_larval_value_updates$1::apply @ bci:2 (line 87) explicit_larval_value_updates::micro @ bci:3 (line 113) explicit_larval_value_updates::main @ bci:47 (line 122)

            jbhateja Jatin Bhateja
            jbhateja Jatin Bhateja
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: