You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			566 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			566 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| # RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-copyelim %s -verify-machineinstrs -o - | FileCheck %s
 | |
| ---
 | |
| # CHECK-LABEL: name: test1
 | |
| # CHECK: ANDSWri %w0, 1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test1
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %x1, %x2
 | |
| 
 | |
|     %w0 = ANDSWri %w0, 1, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test2
 | |
| # CHECK: ANDSXri %x0, 1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test2
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2
 | |
| 
 | |
|     %x0 = ANDSXri %x0, 1, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test3
 | |
| # CHECK: ADDSWri %w0, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test3
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %x1, %x2
 | |
| 
 | |
|     %w0 = ADDSWri %w0, 1, 0, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test4
 | |
| # CHECK: ADDSXri %x0, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test4
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2
 | |
| 
 | |
|     %x0 = ADDSXri %x0, 1, 0, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test5
 | |
| # CHECK: SUBSWri %w0, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test5
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %x1, %x2
 | |
| 
 | |
|     %w0 = SUBSWri %w0, 1, 0, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test6
 | |
| # CHECK: SUBSXri %x0, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test6
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2
 | |
| 
 | |
|     %x0 = SUBSXri %x0, 1, 0, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test7
 | |
| # CHECK: ADDSWrr %w0, %w1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test7
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = ADDSWrr %w0, %w1, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test8
 | |
| # CHECK: ADDSXrr %x0, %x1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test8
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2, %x3
 | |
| 
 | |
|     %x0 = ADDSXrr %x0, %x1, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test9
 | |
| # CHECK: ANDSWrr %w0, %w1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test9
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = ANDSWrr %w0, %w1, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test10
 | |
| # CHECK: ANDSXrr %x0, %x1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test10
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2, %x3
 | |
| 
 | |
|     %x0 = ANDSXrr %x0, %x1, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test11
 | |
| # CHECK: BICSWrr %w0, %w1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test11
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = BICSWrr %w0, %w1, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test12
 | |
| # CHECK: BICSXrr %x0, %x1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test12
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2, %x3
 | |
| 
 | |
|     %x0 = BICSXrr %x0, %x1, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test13
 | |
| # CHECK: SUBSWrr %w0, %w1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test13
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = SUBSWrr %w0, %w1, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test14
 | |
| # CHECK: SUBSXrr %x0, %x1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test14
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2, %x3
 | |
| 
 | |
|     %x0 = SUBSXrr %x0, %x1, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test15
 | |
| # CHECK: ADDSWrs %w0, %w1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test15
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = ADDSWrs %w0, %w1, 0, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test16
 | |
| # CHECK: ADDSXrs %x0, %x1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test16
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2, %x3
 | |
| 
 | |
|     %x0 = ADDSXrs %x0, %x1, 0, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test17
 | |
| # CHECK: ANDSWrs %w0, %w1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test17
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = ANDSWrs %w0, %w1, 0, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test18
 | |
| # CHECK: ANDSXrs %x0, %x1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %xzr
 | |
| name:            test18
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2, %x3
 | |
| 
 | |
|     %x0 = ANDSXrs %x0, %x1, 0, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %x0 = COPY %xzr
 | |
|     STRXui killed %x0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # CHECK-LABEL: name: test19
 | |
| # CHECK: BICSWrs %w0, %w1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: COPY %wzr
 | |
| name:            test19
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %w1, %x2, %x3
 | |
| 
 | |
|     %w0 = BICSWrs %w0, %w1, 0, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x3
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x3, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # Unicorn test - we can remove a redundant copy and a redundant mov
 | |
| # CHECK-LABEL: name: test20
 | |
| # CHECK: SUBSWri %w1, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK-NOT: %w0 = COPY %wzr
 | |
| # CHECK-NOT: %w1 = MOVi32imm 1
 | |
| name:            test20
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w1, %x2
 | |
| 
 | |
|     %w0 = SUBSWri %w1, 1, 0, implicit-def %nzcv
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     %w1 = MOVi32imm 1
 | |
|     STRWui killed %w0, %x2, 0
 | |
|     STRWui killed %w1, killed %x2, 1
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| 
 | |
| ...
 | |
| # Negative test - MOVi32imm clobbers %w0
 | |
| # CHECK-LABEL: name: test21
 | |
| # CHECK: ANDSWri %w0, 1, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK: %w0 = COPY %wzr
 | |
| name:            test21
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %x1, %x2
 | |
| 
 | |
|     %w0 = ANDSWri %w0, 1, implicit-def %nzcv
 | |
|     STRWui killed %w0, %x1, 0
 | |
|     %w0 = MOVi32imm -1
 | |
|     STRWui killed %w0, killed %x1, 1
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # Negative test - SUBSXri self-clobbers x0, so MOVi64imm can't be removed
 | |
| # CHECK-LABEL: name: test22
 | |
| # CHECK: SUBSXri %x0, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK: %x0 = MOVi64imm 1
 | |
| name:            test22
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %x0, %x1, %x2
 | |
| 
 | |
|     %x0 = SUBSXri %x0, 1, 0, implicit-def %nzcv
 | |
|     STRXui killed %x0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %x0 = MOVi64imm 1
 | |
|     STRXui killed %x0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 | |
| ...
 | |
| # Negative test - bb.1 has multiple preds
 | |
| # CHECK-LABEL: name: test23
 | |
| # CHECK: ADDSWri %w0, 1, 0, implicit-def %nzcv
 | |
| # CHECK: bb.1:
 | |
| # CHECK: COPY %wzr
 | |
| name:            test23
 | |
| tracksRegLiveness: true
 | |
| body:             |
 | |
|   bb.0.entry:
 | |
|     liveins: %w0, %x1, %x2
 | |
| 
 | |
|     %w0 = ADDSWri %w0, 1, 0, implicit-def %nzcv
 | |
|     STRWui killed %w0, killed %x1, 0
 | |
|     Bcc 1, %bb.2, implicit killed %nzcv
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.3:
 | |
|     B %bb.1
 | |
| 
 | |
|   bb.1:
 | |
|     liveins: %x2
 | |
| 
 | |
|     %w0 = COPY %wzr
 | |
|     STRWui killed %w0, killed %x2, 0
 | |
| 
 | |
|   bb.2:
 | |
|     RET_ReallyLR
 |