Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[LLVM][AArch64ExpandPseudo] Preserve undef flags when expanding SVE 1/2/3-op pseudo instructions.#149104

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
paulwalker-arm merged 1 commit intollvm:mainfrompaulwalker-arm:D149034
Jul 17, 2025

Conversation

paulwalker-arm
Copy link
Collaborator

Fixes#149034

@llvmbot
Copy link
Member

@llvm/pr-subscribers-backend-aarch64

Author: Paul Walker (paulwalker-arm)

Changes

Fixes#149034


Full diff:https://github.com/llvm/llvm-project/pull/149104.diff

2 Files Affected:

  • (modified) llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp (+12-6)
  • (modified) llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir (+81)
diff --git a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cppindex 7de66ccbf6f29..12fc976a70ea7 100644--- a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp+++ b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp@@ -598,6 +598,9 @@ bool AArch64ExpandPseudo::expand_DestructiveOp(     llvm_unreachable("Unsupported ElementSize");   }+  // Preserve undef state until DOP's reg is defined.+  unsigned DOPRegState = MI.getOperand(DOPIdx).isUndef() ? RegState::Undef : 0;+   //   // Create the destructive operation (if required)   //@@ -616,10 +619,11 @@ bool AArch64ExpandPseudo::expand_DestructiveOp(     PRFX = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(MovPrfxZero))                .addReg(DstReg, RegState::Define)                .addReg(MI.getOperand(PredIdx).getReg())-               .addReg(MI.getOperand(DOPIdx).getReg());+               .addReg(MI.getOperand(DOPIdx).getReg(), DOPRegState);      // After the movprfx, the destructive operand is same as Dst     DOPIdx = 0;+    DOPRegState = 0;      // Create the additional LSL to zero the lanes when the DstReg is not     // unique. Zeros the lanes in z0 that aren't active in p0 with sequence@@ -638,8 +642,9 @@ bool AArch64ExpandPseudo::expand_DestructiveOp(     assert(DOPRegIsUnique && "The destructive operand should be unique");     PRFX = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(MovPrfx))                .addReg(DstReg, RegState::Define)-               .addReg(MI.getOperand(DOPIdx).getReg());+               .addReg(MI.getOperand(DOPIdx).getReg(), DOPRegState);     DOPIdx = 0;+    DOPRegState = 0;   }    //@@ -647,10 +652,11 @@ bool AArch64ExpandPseudo::expand_DestructiveOp(   //   DOP = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(Opcode))     .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead));+  DOPRegState = DOPRegState | RegState::Kill;    switch (DType) {   case AArch64::DestructiveUnaryPassthru:-    DOP.addReg(MI.getOperand(DOPIdx).getReg(), RegState::Kill)+    DOP.addReg(MI.getOperand(DOPIdx).getReg(), DOPRegState)         .add(MI.getOperand(PredIdx))         .add(MI.getOperand(SrcIdx));     break;@@ -659,12 +665,12 @@ bool AArch64ExpandPseudo::expand_DestructiveOp(   case AArch64::DestructiveBinaryComm:   case AArch64::DestructiveBinaryCommWithRev:     DOP.add(MI.getOperand(PredIdx))-       .addReg(MI.getOperand(DOPIdx).getReg(), RegState::Kill)-       .add(MI.getOperand(SrcIdx));+        .addReg(MI.getOperand(DOPIdx).getReg(), DOPRegState)+        .add(MI.getOperand(SrcIdx));     break;   case AArch64::DestructiveTernaryCommWithRev:     DOP.add(MI.getOperand(PredIdx))-        .addReg(MI.getOperand(DOPIdx).getReg(), RegState::Kill)+        .addReg(MI.getOperand(DOPIdx).getReg(), DOPRegState)         .add(MI.getOperand(SrcIdx))         .add(MI.getOperand(Src2Idx));     break;diff --git a/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir b/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mirindex a1d615c910792..c3c39f4d9cee2 100644--- a/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir+++ b/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir@@ -54,3 +54,84 @@ body:             |     renamable $z0 = FADD_ZPZZ_D_UNDEF killed $p0, killed $z1, killed $z2, implicit-def $z0_z1_z2_z3     RET_ReallyLR implicit $z0_z1_z2_z3 ...++---+name: unary_undef_operand+body:             |+  bb.0:+    liveins: $p0, $z0++    ; CHECK: name: unary_undef_operand+    ; CHECK: $z0 = MOVPRFX_ZZ undef $z1+    ; CHECK: $z0 = ABS_ZPmZ_S internal killed $z0, renamable $p0, killed undef renamable $z1+    ; NOTE: Unary _UNDEF psuedo instructions ignore the passthru operand.+    renamable $z0 = ABS_ZPmZ_S_UNDEF renamable $z0, renamable $p0, killed undef renamable $z1+    RET_ReallyLR++...++---+name: binop_undef_operand+body:             |+  bb.0:+    liveins: $p0, $z1++    ; CHECK: name: binop_undef_operand+    ; CHECK-NOT: MOVPRFX+    ; CHECK: $z0 = SMIN_ZPmZ_S renamable $p0, killed undef $z0, killed renamable $z1+    renamable $z0 = SMIN_ZPZZ_S_UNDEF renamable $p0, undef renamable $z0, killed renamable $z1+    RET_ReallyLR++...++---+name: binop_undef_operand_requires_movpfrx+body:             |+  bb.0:+    liveins: $p0, $z1++    ; CHECK: name: binop_undef_operand_requires_movpfrx+    ; CHECK: $z0 = MOVPRFX_ZZ undef $z2+    ; CHECK: $z0 = SMIN_ZPmZ_S renamable $p0, internal killed $z0, killed renamable $z1+    renamable $z0 = SMIN_ZPZZ_S_UNDEF renamable $p0, undef renamable $z2, killed renamable $z1+    RET_ReallyLR++...++---+name: binop_undef_operand_requires_zeroing_movpfrx+body:             |+  bb.0:+    liveins: $p0, $z1++    ; CHECK: name: binop_undef_operand_requires_zeroing_movpfrx+    ; CHECK: $z0 = MOVPRFX_ZPzZ_S $p0, undef $z2+    ; CHECK: $z0 = ADD_ZPmZ_S renamable $p0, internal killed $z0, killed renamable $z1+    renamable $z0 = ADD_ZPZZ_S_ZERO renamable $p0, undef renamable $z2, killed renamable $z1+    RET_ReallyLR++...++---+name: ternaryop_undef_operand+body:             |+  bb.0:+    liveins: $p0, $z1, $z2+    ; CHECK: name: ternaryop_undef_operand+    ; CHECK-NOT: MOVPRFX+    ; CHECK: $z0 = MLA_ZPmZZ_B killed renamable $p0, killed undef $z0, killed renamable $z1, killed renamable $z2+    renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed undef renamable $z0, killed renamable $z1, killed renamable $z2+    RET_ReallyLR implicit $z0+...++---+name: ternaryop_undef_operand_requires_movprfx+body:             |+  bb.0:+    liveins: $p0, $z1, $z2+    ; CHECK: name: ternaryop_undef_operand_requires_movprfx+    ; CHECK: $z0 = MOVPRFX_ZZ undef $z3+    ; CHECK: $z0 = MLA_ZPmZZ_B killed renamable $p0, internal killed $z0, killed renamable $z1, killed renamable $z2+    renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed undef renamable $z3, killed renamable $z1, killed renamable $z2+    RET_ReallyLR implicit $z0+...

@paulwalker-armpaulwalker-arm merged commitb1fca54 intollvm:mainJul 17, 2025
11 checks passed
@paulwalker-armpaulwalker-arm deleted the D149034 branchJuly 17, 2025 10:20
@llvm-ci
Copy link
Collaborator

LLVM Buildbot has detected a new failure on builderlldb-x86_64-debian running onlldb-x86_64-debian while buildingllvm at step 6 "test".

Full details are available at:https://lab.llvm.org/buildbot/#/builders/162/builds/27033

Here is the relevant piece of the build log for the reference
Step 6 (test) failure: build (failure)...UNSUPPORTED: lldb-shell :: ScriptInterpreter/Python/Crashlog/skipped_status_interactive_crashlog.test (3084 of 3095)UNSUPPORTED: lldb-shell :: ScriptInterpreter/Python/Crashlog/interactive_crashlog_arm64_register.test (3085 of 3095)UNSUPPORTED: lldb-shell :: SymbolFile/PDB/enums-layout.test (3086 of 3095)UNSUPPORTED: lldb-shell :: ScriptInterpreter/Lua/lua.test (3087 of 3095)UNSUPPORTED: lldb-shell :: Process/Windows/exception_access_violation.cpp (3088 of 3095)UNSUPPORTED: lldb-shell :: ScriptInterpreter/Python/Crashlog/interactive_crashlog_legacy.test (3089 of 3095)UNSUPPORTED: lldb-shell :: ScriptInterpreter/Lua/breakpoint_function_callback.test (3090 of 3095)UNSUPPORTED: lldb-shell :: Process/Windows/msstl_smoke.cpp (3091 of 3095)PASS: lldb-api :: terminal/TestEditlineCompletions.py (3092 of 3095)UNRESOLVED: lldb-api :: tools/lldb-dap/launch/TestDAP_launch.py (3093 of 3095)******************** TEST 'lldb-api :: tools/lldb-dap/launch/TestDAP_launch.py' FAILED ********************Script:--/usr/bin/python3 /home/worker/2.0.1/lldb-x86_64-debian/llvm-project/lldb/test/API/dotest.py -u CXXFLAGS -u CFLAGS --env LLVM_LIBS_DIR=/home/worker/2.0.1/lldb-x86_64-debian/build/./lib --env LLVM_INCLUDE_DIR=/home/worker/2.0.1/lldb-x86_64-debian/build/include --env LLVM_TOOLS_DIR=/home/worker/2.0.1/lldb-x86_64-debian/build/./bin --arch x86_64 --build-dir /home/worker/2.0.1/lldb-x86_64-debian/build/lldb-test-build.noindex --lldb-module-cache-dir /home/worker/2.0.1/lldb-x86_64-debian/build/lldb-test-build.noindex/module-cache-lldb/lldb-api --clang-module-cache-dir /home/worker/2.0.1/lldb-x86_64-debian/build/lldb-test-build.noindex/module-cache-clang/lldb-api --executable /home/worker/2.0.1/lldb-x86_64-debian/build/./bin/lldb --compiler /home/worker/2.0.1/lldb-x86_64-debian/build/./bin/clang --dsymutil /home/worker/2.0.1/lldb-x86_64-debian/build/./bin/dsymutil --make /usr/bin/gmake --llvm-tools-dir /home/worker/2.0.1/lldb-x86_64-debian/build/./bin --lldb-obj-root /home/worker/2.0.1/lldb-x86_64-debian/build/tools/lldb --lldb-libs-dir /home/worker/2.0.1/lldb-x86_64-debian/build/./lib --cmake-build-type Release -t /home/worker/2.0.1/lldb-x86_64-debian/llvm-project/lldb/test/API/tools/lldb-dap/launch -p TestDAP_launch.py--Exit Code: 1Command Output (stdout):--lldb version 22.0.0git (https://github.com/llvm/llvm-project.git revision b1fca543f7c34012697afd99c3dfe1306aa2acab)  clang revision b1fca543f7c34012697afd99c3dfe1306aa2acab  llvm revision b1fca543f7c34012697afd99c3dfe1306aa2acabSkipping the following test categories: ['libc++', 'msvcstl', 'dsym', 'gmodules', 'debugserver', 'objc']--Command Output (stderr):--Change dir to: /home/worker/2.0.1/lldb-x86_64-debian/llvm-project/lldb/test/API/tools/lldb-dap/launchrunCmd: settings clear --alloutput: runCmd: settings set symbols.enable-external-lookup falseoutput: runCmd: settings set target.inherit-tcc trueoutput: runCmd: settings set target.disable-aslr falseoutput: runCmd: settings set target.detach-on-error falseoutput: runCmd: settings set target.auto-apply-fixits false

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@sdesmalen-armsdesmalen-armsdesmalen-arm approved these changes

@davemgreendavemgreenAwaiting requested review from davemgreen

Assignees
No one assigned
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

[AArch64] SMIN: Bad machine code: Using an undefined physical register
4 participants
@paulwalker-arm@llvmbot@llvm-ci@sdesmalen-arm

[8]ページ先頭

©2009-2025 Movatter.jp