98 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -mtriple aarch64 -O0 -stop-after=instruction-select -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s3 4%dag = type { { { i8, { i8 } }, { { i8, { i8 } }, { i8 } } }, { { i8, { i8 } }, { i8 } } }5 6define void @test_const(ptr %dst) {7 ; CHECK-LABEL: name: test_const8 ; CHECK: bb.1.entry:9 ; CHECK: liveins: $x010 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x011 ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1012 ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 0 :: (store (s8) into %ir.dst)13 ; CHECK: [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 2014 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 1 :: (store (s8) into %ir.dst + 1)15 ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 2 :: (store (s8) into %ir.dst + 2)16 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 3 :: (store (s8) into %ir.dst + 3)17 ; CHECK: [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 5018 ; CHECK: STRBBui [[MOVi32imm2]], [[COPY]], 4 :: (store (s8) into %ir.dst + 4)19 ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 5 :: (store (s8) into %ir.dst + 5)20 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 6 :: (store (s8) into %ir.dst + 6)21 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 7 :: (store (s8) into %ir.dst + 7)22 ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 0 :: (store (s8) into %ir.dst)23 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 1 :: (store (s8) into %ir.dst + 1)24 ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 2 :: (store (s8) into %ir.dst + 2)25 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 3 :: (store (s8) into %ir.dst + 3)26 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 4 :: (store (s8) into %ir.dst + 4)27 ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 5 :: (store (s8) into %ir.dst + 5)28 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 6 :: (store (s8) into %ir.dst + 6)29 ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 7 :: (store (s8) into %ir.dst + 7)30 ; CHECK: RET_ReallyLR31entry:32 %updated = insertvalue33 ; Check that we're visiting constants with shared parts34 ; (deduplicated via LLVMContext, forming a proper DAG) correctly:35 %dag {36 { { i8, { i8 } }, { { i8, { i8 } }, { i8 } } } {37 { i8, { i8 } } {38 i8 10,39 { i8 } { i8 20 }40 },41 { { i8, { i8 } }, { i8 } } {42 { i8, { i8 } } {43 i8 10,44 { i8 } { i8 20 }45 },46 { i8 } { i8 20 }47 }48 },49 { { i8, { i8 } }, { i8 } } {50 { i8, { i8 } } {51 i8 10,52 { i8 } { i8 20 }53 },54 { i8 } { i8 20 }55 }56 },57 { { i8, { i8 } }, { i8 } } {58 { i8, { i8 } } {59 i8 10,60 { i8 } { i8 20 }61 },62 { i8 } { i8 50 }63 },64 0,65 166 store %dag %updated, ptr %dst67 ; 10, 20, 10, 20, 50, 10, 20, 20 sequence is expected68 69 store70 ; Check that we didn't overwrite a previously seen constant71 ; while processing an insertvalue into it:72 %dag {73 { { i8, { i8 } }, { { i8, { i8 } }, { i8 } } } {74 { i8, { i8 } } {75 i8 10,76 { i8 } { i8 20 }77 },78 { { i8, { i8 } }, { i8 } } {79 { i8, { i8 } } {80 i8 10,81 { i8 } { i8 20 }82 },83 { i8 } { i8 20 }84 }85 },86 { { i8, { i8 } }, { i8 } } {87 { i8, { i8 } } {88 i8 10,89 { i8 } { i8 20 }90 },91 { i8 } { i8 20 }92 }93 },94 ptr %dst95 ; 10, 20, 10, 20, 20, 10, 20, 20 sequence is expected96 ret void97}98