Index: llvm/trunk/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp =================================================================== --- llvm/trunk/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp +++ llvm/trunk/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp @@ -76,7 +76,7 @@ case AMDGPU::COPY: case AMDGPU::S_MOV_B64: { const MachineOperand &Dst = MI.getOperand(0); - if (Dst.isReg() && Dst.getReg() == AMDGPU::EXEC) + if (Dst.isReg() && Dst.getReg() == AMDGPU::EXEC && MI.getOperand(1).isReg()) return MI.getOperand(1).getReg(); break; } Index: llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.init.exec.ll =================================================================== --- llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.init.exec.ll +++ llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.init.exec.ll @@ -74,6 +74,15 @@ ret float %f } +; GCN-LABEL: {{^}}init_unreachable: +; +; This used to crash. +define amdgpu_ps void @init_unreachable() { +main_body: + call void @llvm.amdgcn.init.exec(i64 -1) + unreachable +} + declare void @llvm.amdgcn.init.exec(i64) #1 declare void @llvm.amdgcn.init.exec.from.input(i32, i32) #1