diff --git a/llvm/lib/Target/CSKY/CSKYInstrInfo.td b/llvm/lib/Target/CSKY/CSKYInstrInfo.td --- a/llvm/lib/Target/CSKY/CSKYInstrInfo.td +++ b/llvm/lib/Target/CSKY/CSKYInstrInfo.td @@ -1410,6 +1410,11 @@ defm : MOVTF32Pat1; defm : MOVTF32Pat1; defm : MOVTF32Pat1; + +def : Pat<(select CARRY:$ca, (i32 0), GPR:$other), + (CLRT32 CARRY:$ca, GPR:$other)>; +def : Pat<(select CARRY:$ca, GPR:$other, (i32 0)), + (CLRF32 CARRY:$ca, GPR:$other)>; } // Constant materialize patterns. diff --git a/llvm/test/CodeGen/CSKY/select.ll b/llvm/test/CodeGen/CSKY/select.ll --- a/llvm/test/CodeGen/CSKY/select.ll +++ b/llvm/test/CodeGen/CSKY/select.ll @@ -135,9 +135,8 @@ define i32 @selectRI_0_if_true(i1 %c, i32 %q) { ; CHECK-LABEL: selectRI_0_if_true: ; CHECK: # %bb.0: -; CHECK-NEXT: movi16 a2, 0 ; CHECK-NEXT: btsti16 a0, 0 -; CHECK-NEXT: movt32 a1, a2 +; CHECK-NEXT: clrt32 a1 ; CHECK-NEXT: mov16 a0, a1 ; CHECK-NEXT: rts16 ; @@ -162,10 +161,9 @@ define i32 @selectRI_0_if_false(i1 %c, i32 %q) { ; CHECK-LABEL: selectRI_0_if_false: ; CHECK: # %bb.0: -; CHECK-NEXT: movi16 a2, 0 ; CHECK-NEXT: btsti16 a0, 0 -; CHECK-NEXT: movt32 a2, a1 -; CHECK-NEXT: mov16 a0, a2 +; CHECK-NEXT: clrf32 a1 +; CHECK-NEXT: mov16 a0, a1 ; CHECK-NEXT: rts16 ; ; GENERIC-LABEL: selectRI_0_if_false: