@@ -323,60 +323,61 @@ static bool shrinkScalarLogicOp(const GCNSubtarget &ST,
323
323
MachineOperand *SrcReg = Src0;
324
324
MachineOperand *SrcImm = Src1;
325
325
326
- if (SrcImm->isImm () &&
327
- !AMDGPU::isInlinableLiteral32 (SrcImm->getImm (), ST.hasInv2PiInlineImm ())) {
328
- uint32_t Imm = static_cast <uint32_t >(SrcImm->getImm ());
329
- uint32_t NewImm = 0 ;
330
-
331
- if (Opc == AMDGPU::S_AND_B32) {
332
- if (isPowerOf2_32 (~Imm)) {
333
- NewImm = countTrailingOnes (Imm);
334
- Opc = AMDGPU::S_BITSET0_B32;
335
- } else if (AMDGPU::isInlinableLiteral32 (~Imm, ST.hasInv2PiInlineImm ())) {
336
- NewImm = ~Imm;
337
- Opc = AMDGPU::S_ANDN2_B32;
338
- }
339
- } else if (Opc == AMDGPU::S_OR_B32) {
340
- if (isPowerOf2_32 (Imm)) {
341
- NewImm = countTrailingZeros (Imm);
342
- Opc = AMDGPU::S_BITSET1_B32;
343
- } else if (AMDGPU::isInlinableLiteral32 (~Imm, ST.hasInv2PiInlineImm ())) {
344
- NewImm = ~Imm;
345
- Opc = AMDGPU::S_ORN2_B32;
346
- }
347
- } else if (Opc == AMDGPU::S_XOR_B32) {
348
- if (AMDGPU::isInlinableLiteral32 (~Imm, ST.hasInv2PiInlineImm ())) {
349
- NewImm = ~Imm;
350
- Opc = AMDGPU::S_XNOR_B32;
351
- }
352
- } else {
353
- llvm_unreachable (" unexpected opcode" );
354
- }
326
+ if (!SrcImm->isImm () ||
327
+ AMDGPU::isInlinableLiteral32 (SrcImm->getImm (), ST.hasInv2PiInlineImm ()))
328
+ return false ;
329
+
330
+ uint32_t Imm = static_cast <uint32_t >(SrcImm->getImm ());
331
+ uint32_t NewImm = 0 ;
355
332
356
- if ((Opc == AMDGPU::S_ANDN2_B32 || Opc == AMDGPU::S_ORN2_B32) &&
357
- SrcImm == Src0) {
358
- if (!TII->commuteInstruction (MI, false , 1 , 2 ))
359
- NewImm = 0 ;
333
+ if (Opc == AMDGPU::S_AND_B32) {
334
+ if (isPowerOf2_32 (~Imm)) {
335
+ NewImm = countTrailingOnes (Imm);
336
+ Opc = AMDGPU::S_BITSET0_B32;
337
+ } else if (AMDGPU::isInlinableLiteral32 (~Imm, ST.hasInv2PiInlineImm ())) {
338
+ NewImm = ~Imm;
339
+ Opc = AMDGPU::S_ANDN2_B32;
340
+ }
341
+ } else if (Opc == AMDGPU::S_OR_B32) {
342
+ if (isPowerOf2_32 (Imm)) {
343
+ NewImm = countTrailingZeros (Imm);
344
+ Opc = AMDGPU::S_BITSET1_B32;
345
+ } else if (AMDGPU::isInlinableLiteral32 (~Imm, ST.hasInv2PiInlineImm ())) {
346
+ NewImm = ~Imm;
347
+ Opc = AMDGPU::S_ORN2_B32;
348
+ }
349
+ } else if (Opc == AMDGPU::S_XOR_B32) {
350
+ if (AMDGPU::isInlinableLiteral32 (~Imm, ST.hasInv2PiInlineImm ())) {
351
+ NewImm = ~Imm;
352
+ Opc = AMDGPU::S_XNOR_B32;
360
353
}
354
+ } else {
355
+ llvm_unreachable (" unexpected opcode" );
356
+ }
361
357
362
- if (NewImm != 0 ) {
363
- if (Register::isVirtualRegister (Dest->getReg ()) && SrcReg->isReg ()) {
364
- MRI.setRegAllocationHint (Dest->getReg (), 0 , SrcReg->getReg ());
365
- MRI.setRegAllocationHint (SrcReg->getReg (), 0 , Dest->getReg ());
366
- return true ;
367
- }
358
+ if ((Opc == AMDGPU::S_ANDN2_B32 || Opc == AMDGPU::S_ORN2_B32) &&
359
+ SrcImm == Src0) {
360
+ if (!TII->commuteInstruction (MI, false , 1 , 2 ))
361
+ NewImm = 0 ;
362
+ }
368
363
369
- if (SrcReg->isReg () && SrcReg->getReg () == Dest->getReg ()) {
370
- MI.setDesc (TII->get (Opc));
371
- if (Opc == AMDGPU::S_BITSET0_B32 ||
372
- Opc == AMDGPU::S_BITSET1_B32) {
373
- Src0->ChangeToImmediate (NewImm);
374
- // Remove the immediate and add the tied input.
375
- MI.getOperand (2 ).ChangeToRegister (Dest->getReg (), false );
376
- MI.tieOperands (0 , 2 );
377
- } else {
378
- SrcImm->setImm (NewImm);
379
- }
364
+ if (NewImm != 0 ) {
365
+ if (Register::isVirtualRegister (Dest->getReg ()) && SrcReg->isReg ()) {
366
+ MRI.setRegAllocationHint (Dest->getReg (), 0 , SrcReg->getReg ());
367
+ MRI.setRegAllocationHint (SrcReg->getReg (), 0 , Dest->getReg ());
368
+ return true ;
369
+ }
370
+
371
+ if (SrcReg->isReg () && SrcReg->getReg () == Dest->getReg ()) {
372
+ MI.setDesc (TII->get (Opc));
373
+ if (Opc == AMDGPU::S_BITSET0_B32 ||
374
+ Opc == AMDGPU::S_BITSET1_B32) {
375
+ Src0->ChangeToImmediate (NewImm);
376
+ // Remove the immediate and add the tied input.
377
+ MI.getOperand (2 ).ChangeToRegister (Dest->getReg (), false );
378
+ MI.tieOperands (0 , 2 );
379
+ } else {
380
+ SrcImm->setImm (NewImm);
380
381
}
381
382
}
382
383
}
0 commit comments